Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - EAccessViolation bei Zugriff auf dyn. Array


JungerIslaender - So 17.01.10 21:48
Titel: EAccessViolation bei Zugriff auf dyn. Array
Warumm bekomme ich bei folgendem Quellcode eine Exception der Klasse EAccessViolation:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
SetLength(Knoten_Array,Listbox1.Items.Count,8);
for i:= 0 to Listbox1.Items.Count do
  begin
  for j:= 0 to 7 do
    begin
    Knoten_Array[i,j]:=0;
    end;
  end;


Moderiert von user profile iconNarses: Titel erweitert.


Hidden - So 17.01.10 22:01

Hi :)

Auch i müsste bis Length - 1 laufen, also greifst du für i = Listbox1.Items.Count auf Speicher außerhalb des Arrays zu. :zwinker:

mfG,

PS: Solche Fehler hat man, wenn man eigentlich ins Bett müsste =)
PS2: Der Titel gibt mehr Fragen als Antworten :)


jaenicke - So 17.01.10 22:04

Weil du ein Array mit den Indizes 0..Listbox1.Items.Count - 1 erstellst, aber auf den Index Listbox1.Items.Count zugreifst wie user profile iconHidden schon geschrieben hat wie ich gerade sehe. Deshalb solltest du besser nicht zwei Sachen vermischen:
Wenn du auf das Array zugreifst, warum benutzt du dann für die Größenangabe andere Werte? Wenn du die Werte auch aus dem Array nimmst, kann so etwas nicht passieren... ;-)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  SetLength(KnotenArray, Listbox1.Items.Count, 8);
  for i := Low(KnotenArray) to High(KnotenArray) do
  begin
    for j := Low(KnotenArray[i]) to High(KnotenArray[i]) do
    begin
      KnotenArray[i, j] := 0;
    end;
  end;


JungerIslaender - So 17.01.10 22:23

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
Hi :)
PS: Solche Fehler hat man, wenn man eigentlich ins Bett müsste =)


Jo das muss ich, hab als du es gesagt hast auch direkt den Fehler gesehen... :oops: :roll: