AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

E/A Fehler in Dyn. Array

Ein Thema von BungeeBug · begonnen am 23. Dez 2003 · letzter Beitrag vom 23. Dez 2003
Antwort Antwort
BungeeBug

Registriert seit: 19. Dez 2002
Ort: zuhause?!
227 Beiträge
 
Delphi 6 Personal
 
#1

E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 11:37
Hi all,

ich habe ein dyn. Array, in dem ich gerne MD5Digests speichern würde. Also hab ich mir eben nen
MyHashArray : Array of MD5Digest; erstellt. So weit so gut.
Nun habe ich eine Procedure die das Array füllen soll.
Delphi-Quellcode:
// 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;
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.
Ich weis nur nich was ich flasch mache ...

Zusatzinfo:
Es handelt ich um eine "EAccessViolation".

Bin für jeden Tipp zuhaben
MfG BungeeBug
Wer andern eine Grube gräbt sollte auf Gasleitungen achten!!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:09
Geh die Schleife mal mit F7 durch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#3

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:14
Hallo!
  1. Du solltest SetLength nur einmal außerhalb der Schleife aufrufen, das ist schneller
  2. Wenn Du "SetLength(myHashArray, i)" machst, dann ist der höchste Index i-1, Du greifst aber auf den Index i zu!
MfG
Peter

//edit: Mutter aller Rechtschreibfehler korrigiert!
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
BungeeBug

Registriert seit: 19. Dez 2002
Ort: zuhause?!
227 Beiträge
 
Delphi 6 Personal
 
#4

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:43
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 ...
MfG BungeeBug
Wer andern eine Grube gräbt sollte auf Gasleitungen achten!!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:46
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:47
Hallo BungeeBug,

das ist genau in den beiden Zeilen:
Delphi-Quellcode:
SetLength(MyHashArray,i);
MyHashArray[i] := //...
in Deinem Code der Fall.

Entweder solltest Du SetLength(MyHashArray, Succ(i)); verwenden oder gleich dem Rat von Peter Lustig folgen und die Länge nur einmalig zu Beginn setzen.
gruß, choose
  Mit Zitat antworten Zitat
BungeeBug

Registriert seit: 19. Dez 2002
Ort: zuhause?!
227 Beiträge
 
Delphi 6 Personal
 
#7

Re: E/A Fehler in Dyn. Array

  Alt 23. Dez 2003, 12:58
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
MfG BungeeBug
Wer andern eine Grube gräbt sollte auf Gasleitungen achten!!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz