Entwickler-Ecke

Sonstiges (Delphi) - EAccessviolation: Aber wo ist der Grund?


Bockscar - Sa 04.03.06 10:34
Titel: EAccessviolation: Aber wo ist der Grund?
Hi. Bei der Anwendung folgenden Codes bekomme ich eine EAccessviolation und das Programm lässt sich nicht starten.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
 procedure Tcroupier.set_winmatrix;
 var i :integer;
 begin
 setlength(winmatrix,36);

  //Für Zahlen in den Randreihen
  for i := 1 to 24 do
   setlength(winmatrix[randreihe[i]],14);
  //Für Zahlen der Mittelreihe
  for i := 1 to 12 do
   setlength(winmatrix[mittereihe[i]],17);
  
//In den Arrays randreihe und mittereihe stehen die indexes von 1..36 der winmatrix die entweder nen laenge 14 oder 17 //haben sollen. Das mehrdimensionale array ist eben "unsymmetrisch"
  
//Winmatrix füllen für Zahlen in den Randreihen
  for i := 0 to 13 do
   begin
    winmatrix[1][i] := a1[i];
    winmatrix[3][i] := a3[i];
    winmatrix[4][i] := a4[i];
    winmatrix[6][i] := a6[i];
    winmatrix[7][i] := a7[i];
    winmatrix[9][i] := a9[i];
    winmatrix[10][i] := a10[i];
    winmatrix[12][i] := a12[i];
    winmatrix[13][i] := a13[i];
    winmatrix[15][i] := a15[i];
    winmatrix[16][i] := a16[i];
    winmatrix[18][i] := a18[i];
    winmatrix[19][i] := a19[i];
    winmatrix[21][i] := a21[i];
    winmatrix[22][i] := a22[i];
    winmatrix[24][i] := a24[i];
    winmatrix[25][i] := a25[i];
    winmatrix[27][i] := a27[i];
    winmatrix[28][i] := a28[i];
    winmatrix[30][i] := a30[i];
    winmatrix[31][i] := a31[i];
    winmatrix[33][i] := a33[i];
    winmatrix[34][i] := a34[i];
    winmatrix[36][i] := a36[i];
   end;
  for i := 0 to 13 do
   begin
    winmatrix[2][i] := a2[i];
    winmatrix[5][i] := a5[i];
    winmatrix[8][i] := a8[i];
    winmatrix[11][i] := a11[i];
    winmatrix[14][i] := a14[i];
    winmatrix[17][i] := a17[i];
    winmatrix[20][i] := a20[i];
    winmatrix[23][i] := a23[i];
    winmatrix[26][i] := a26[i];
    winmatrix[29][i] := a29[i];
    winmatrix[32][i] := a32[i];
    winmatrix[35][i] := a35[i];
   end;
end;


Winmatrix ist ein mehrdimensionales array mit 36 elementen in dimension 1 und diesen neuen arrays werden werte aus folgenden konstanten arrays zugewiesen.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
a1:  array[0..13of integer=(1,37,40,73,97,99,111,112,134,145,150,151,153,155);
a4:  array[0..13of integer=(4,40,43,75,100,112,114,134,135,145,150,151,152,154);
a7:  array[0..13of integer=(7,43,46,77,101,114,116,135,136,145,150,151,153,155);
a10: array[0..13of integer=(10,46,49,79,102,116,118,136,137,145,150,151,152,154);

...



Eigentlich müsste das ja klappen, aber die Violation sagt mir ja dass ich irgendwas falsch mache.

Vielen Dank für die Hilfe im Vorraus


Gausi - Sa 04.03.06 10:44


Delphi-Quelltext
1:
2:
3:
setlength(winmatrix,36);
//...
winmatrix[36][i] := a36[i];
Fehler klar? Indizierung geht von 0 bis 35, nicht von 1 bis 36


Bockscar - Sa 04.03.06 10:49

super klappt direkt! vielen dank