Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#11

Re: array of TImage ... length liefert einen ganz falschen W

  Alt 4. Apr 2008, 22:58
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).
  Mit Zitat antworten Zitat