Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#4

AW: Löschen aus der StringList verursacht Fehler, wieso?

  Alt 23. Mai 2015, 21:25
Du musst eines bedenken: nehmen wir an du hast eine StringList mit 10 Items, also Count = 10.

Nun gehst du mit For To Do 0 bist 9 durch. Das ist der Wert von Count - 1 am Anfang. Das merkt sich die For To Do Schleife. Sie merkt sich die Zahl 9 und geht alle 10 Werte durch. Aber mitten drin löscht du Items aus der StringList. Nach dem ersten Löschvorgang gibt es nur noch 9 Items, nach dem zweiten 8, bei dem dritten 7, vierten 6, fünften 5, sechsten (das wäre dann i = 5) hätte die StringList nur noch 4 Items. Spätestens hier greifst du auf einen Item den es nicht mehr gibt.

Lösung: nicht for i := 0 to gvErrorReportList.Count - 1 do sondern for i := gvErrorReportList.Count - 1 downto 0 do . In dem Fall gehst du von oben nach unten und überschreitest nie die Grenze.
  Mit Zitat antworten Zitat