![]() |
Programmabsturz bei Zugriff auf letztes Item einer Listbox
2Hallo!
Mein Programm stürzt beim Zugriff auf eine Listbox ab. Hier ist der Code: (vereinfacht)
Delphi-Quellcode:
"Sicherungsname" ist eine Funktion aus nur einer einzigen Zeile, die einen eindeutigen Dateinamen zurückgibt. Hundertfach getestet, darin liegt der Fehler sicher nicht.
for i:=0 to listbox1.items.count-1 do
begin if copyfile(pchar(listbox1.items[i]),pchar(sicherungsname(listbox1.items[i])),false)=true then showmessage(listbox1.items[i]+' wurde gesichert.') else begin showmessage(listbox1.items[i]+' konnte nicht gesichert werden.'); listbox1.items.delete(listbox1.items.indexof(listbox1.items[i])); end; end; Durch Debuggen bin ich dann draufgekommen, der Fehler liegt darin:
Delphi-Quellcode:
Wenn listbox1 aus 3 Items besteht, läuft das Programm 3 mal durch, aber beim 3. Mal an dieser Stelle kommt folgende Meldung:
if copyfile(pchar(listbox1.items[i]),pchar(sicherungsname(listbox1.items[i])),false)=true then showmessage(listbox1.items[i]+' wurde gesichert.')
"Im Projekt Project1 ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Der Index der Liste überschreitet das Maximum (2)' [...] " Wieso überschreitet der Index den Wert 2? ich habe doch "to listbox1.items.count-1" gemacht! mfg. Tubos |
Re: Programmabsturz bei Zugriff auf letztes Item einer Listb
Wenn du Einträge aus der Liste löschst, laß die Schleife rückwärts laufen (... items.count-1 downto 0 )
Bei einer Fpr-schleife wird das Schleifenende vorm eintritt in die Schliefe festgelegt. z.B. 5 Durchläufe und du löschst innerhalb der Schleife einen eintrag wird die Schleife trotzdem 5xdurchlaufen und ist dann evtl dein grund für die AV. mfg Frank |
Re: Programmabsturz bei Zugriff auf letztes Item einer Listb
Danke, daran hats gelegen :D
Ich lasse die Schleife jetzt nicht herunterzählen, aber ich habe die For-Schleife durch eine While-schleife ersetzt und wenn ich ein item herauslösche, verringere ich die Zählvariable um 1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz