Erstmal: Hast du die Bereichsprüfung eingeschaltet bei dem Projekt? Wenn nein, mach dies in den Projektoptionen->Compiler und erstelle das gesamte Projekt neu. Dann führe die Methode nochmal aus.
Zu deinem Code:
Delphi-Quellcode:
procedure c(anum, art : integer);
var
anzahl : integer;
begin
anzahl := length(a[anum].wunden);
setLength(A[anum].c,anzahl + 1);
A[anum].c[anzahl-1] := TImage.create(frmB);
A[anum].c[anzahl-1].parent := frmB;
// Text unwichtig
end;
- Wieso ermittelst du die Länge von Wunden um dann c auf diese Länge + 1 zu setzen?
- Eintrag Anzahl-1 ist nicht richtige Index, sondern Anzahl ist der letzte Index. Du hast ja auf Anzahl + 1 die Größe gesetzt.
Kleines Rechenbeispiel:
-> Anzahl wird mit 0 ermittelt
-> Du setzt c auf Anzahl + 1, also eine Länge von 1
-> Du greifst auf -1 zu, da du Anzahl - 1 nimmst
Mit der Bereichsprüfung hätte er dir das zur Laufzeit um die Ohren gehauen!
Du zerschiesst dir jetzt den Speicher, das kann unvorhersehbare Folgen haben, da du wild fremden Speicher editierst (fremd im Sinne der nicht eigentlich anvisierten Variablen).