Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - dynamische Arrays : verschiedene Fehlermeldungen ....
elduchte - Do 26.06.03 11:12
Titel: dynamische Arrays : verschiedene Fehlermeldungen ....
Hallo,
ich habe folgendes Programm geschrieben:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| var anzahl : integer; i : integer; wert : integer; gr_Wert: integer; kl_Wert: integer; Felder : array of integer; begin anzahl := 0; kl_Wert := 0; gr_Wert := 0; randomize; anzahl := StrToInt(Edit1.Text); SetLength(Felder, anzahl); for i := 1 to Anzahl do begin wert := random(100); Felder[i] := wert; end; for i := 1 to Anzahl do begin gr_Wert := MaxIntValue(Felder); kl_Wert := MinIntValue(Felder); end; Edit2.Text := IntToStr(gr_Wert); Edit3.Text := IntToStr(kl_Wert); end; |
Nach Start des Programms gebe ich die Anzahl der zu erzeugenden Zufallszahlen ein, die in einem dynamischen Array abgelegt werden sollen. Manchmal habe ich da schon beim Start eine Fehlermeldung der Klasse EAccessViolation: Habe auch schon nachgelesen, was diese Fehlermeldung bedeutet, allerdings kann ich damit immer noch keinen Fehler herausfinden.
Zur nächsten Fehlermeldung:
Gebe ich zB als Anzahl 30 ein, bekomme ich eine Fehlermeldung: Zugriffsverletzung und dann viele Speicheradressen.
Gebe ich als Anzahl 10 ein, berechnet er mir, so wie ich es mir vorstelle, klicke ich dann allerdings auf den Schließen-Button, bekomme ich eine Fehlermeldung, dass ich einen Pointer nicht richtig benutze.
Was mache ich mit meinen dynamischen Arrays falsch ??
ein verzweifelter
Andreas
Keldorn - Do 26.06.03 11:15
Hallo
Zitat: |
for i := 1 to Anzahl do
begin
wert := random(100);
Felder[i] := wert;
end;
|
dyn. array beginnen bei 0 und der letzte Index ist dann anzahl-1
probiers mal so
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i := 0 to Anzahl-1 do begin wert := random(100); Felder[i] := wert; end; |
warum setzt Du maxintvalue auch noch in eine Schleife?
Mfg Frank
elduchte - Do 26.06.03 11:43
AHHHH, stimmt ja, jetzt habe ich zumindestens keine Fehlermeldung mehr...
Die zweite Schleife war nur ein Versuch, habe gedacht, so finde ich den Fehler besser (einfacher). Habe die beiden Funktionen schon wieder umkopiert.
Wie kann ich alle Array-Felder löschen, wenn ich z.B. das Programm ein zweites Mal furchlaufen möchte ? Er behält nämlich die Werte solange gespeichert, bis ich das Programm beende.... Gibt es da sowas wie eine Initialisierung?
Gruß
Andreas
BeniSchindler - Do 26.06.03 12:41
Wenn du die selbe Procedur einfach nochmal aufrufst, dann müsste er eigentlich deine alten Werte überschreiben. Du kannst jedoch am anfang der Prozedure die Zeile schreiben:
Nach dem der Integer kein Objekt ist, kannst du ihn leider auch nicht Freigeben. Bei einem Array of TObject würde man das ganze so lösen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Procedure ClearArray(var TheArray : array of TObject ); var index :integer; begin for index := 0 to high(TheArray) do TheArray[Index].Free; SetLength(TheArray,0) end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!