![]() |
E/A Fehler in Dyn. Array
Hi all,
ich habe ein dyn. Array, in dem ich gerne MD5Digests speichern würde. Also hab ich mir eben nen
Delphi-Quellcode:
erstellt. So weit so gut.
MyHashArray : Array of MD5Digest;
Nun habe ich eine Procedure die das Array füllen soll.
Delphi-Quellcode:
Das geht auch alles bis zu einer beliebigen Anzahl an Einträgen (Zahl ist immer anders). Dann bekomm ich eine Exception vom Kompiler der dann auch Promt alle 4re von sich streckt und nix mehr macht.
// Thread zum hashen
// Proceduren PROCEDURE TMyHashThread.execute; VAR i : integer; BEGIN // Code zum hashen ... SetLength(MyHashArray,0); FOR i := 0 TO Form1.ListBox1.Items.Count-1 DO BEGIN SetLength(MyHashArray,i); MyHashArray[i] := MD5File(Copy(Verzeichniss,0,Pos('*',Verzeichniss)-1)+Form1.ListBox1.Items[i]); END; END; Ich weis nur nich was ich flasch mache ... Zusatzinfo: Es handelt ich um eine "EAccessViolation". Bin für jeden Tipp zuhaben :) |
Re: E/A Fehler in Dyn. Array
Geh die Schleife mal mit F7 durch.
|
Re: E/A Fehler in Dyn. Array
Hallo!
Peter //edit: Mutter aller Rechtschreibfehler korrigiert! |
Re: E/A Fehler in Dyn. Array
Wieso alle Komponenten die ich benutze sollten als ersten Index die 0 haben. Was also kein Problem darstellen sollte ...
€dit : ich habs trotzdem mal probiert und das bringt das ganze gleich zum Absturz -> 'List out of Bound (-1)' Ich die Fehlermeldung was ja auch stimmt ... |
Re: E/A Fehler in Dyn. Array
Ja, aber dem ist nicht so. Welchen Wert hat i beim ersten Durchlauf? 0. Wie lang wird das Array bei SetLenght(..., i);? 0. Wo fügts du das ertse Element ein? Bei 0. -> Crash!
Da du weißt wie viele Elemente du brauchst, setzte die Länge vor der Schleife, dann kannst du mit i auf die Elemente zugreifen. Das ist erstens performanter und zweites tuts du dir deinem Speicher was Gutes. :wink: |
Re: E/A Fehler in Dyn. Array
Hallo BungeeBug,
das ist genau in den beiden Zeilen:
Delphi-Quellcode:
in Deinem Code der Fall.
SetLength(MyHashArray,i);
MyHashArray[i] := //... Entweder solltest Du
Delphi-Quellcode:
verwenden oder gleich dem Rat von Peter Lustig folgen und die Länge nur einmalig zu Beginn setzen.
SetLength(MyHashArray, Succ(i));
|
Re: E/A Fehler in Dyn. Array
Hi,
ich hab die Länge nun gleich gestezt ... und es geht ( oh Wunder )... Danke @ all. Nur stell ich mir nu die Frage wieso ich nich gleich drauf gekommen bin :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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-2025 by Thomas Breitkreuz