Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dyn. Array führt zu Absturz (https://www.delphipraxis.net/64653-dyn-array-fuehrt-zu-absturz.html)

Scharfrichter 6. Mär 2006 17:03


Dyn. Array führt zu Absturz
 
Nabend,

ich arbeite gerade an einem kleinen Sortierungsprogramm und wie Sortierungen das so an sich haben, brauch ich dafür ein Array. Daher hab ich mir also ein dyn. Array aufgzogen
feld: array of integer;

in diesem array werden zahlen gespeichert die hinter sortiert werden sollen. und dieses array macht zicken sobald man das programm beenden will. sobald man das array mit irgendwelchen zahlen befüllt, ist ein fehler am programmende vorprogramiert. dass soll so viel heissen, dass ich dass array zur laufzeit mit so vielen zahlen von oben bis unten zu pumpen kann und auch ganz normal damit hantieren kann, nur zu dem zeitpunkt wo ich das programm beende kommt halt ein fehler. Delphi stellt eine "exception der klasse EInvalidPointer" fest, ich bekomm dann noch zwei weiter Messagen die mir auch nochmal sagen das eine ungültige zeigeroperation festgestellt wurde und das programm stürzt, obwohl es ja eigentlich schon beendet wurden. dass hat zwar zur laufzeit absolut keinen effekt, es sieht aber einfach nur verdammt scheisse aus wenn man so nen dicken fehler bekommt wenn man das programm gerade beendet. für den fall das ich mein programm aber starte und das array aber nicht befülle und irgendwelche anderen sachen teste, bekomm ich keinen abbruch, erst zu dem zeitpunkt wo das array einmal befüllt wurde.
daher meine frage, was muss ich machen damit mir dieser fehler nicht mehr passiert?! ;)

marabu 6. Mär 2006 17:09

Re: Dyn. Array führt zu Absturz
 
Du musst das Array korrekt dimensionieren. Und damit du hinterher auch nicht auf verbotenen Pfaden wandelst mache es so:

Delphi-Quellcode:
var
  feld: array of Integer;
  i: Integer;
begin
  SetLength(feld, 20);
  for i := Low(feld) to High(feld) do
    feld[i] := Random(1000);
end;
Grüße vom marabu

markusj 6. Mär 2006 17:10

Re: Dyn. Array führt zu Absturz
 
Hast du das Aray mit Finalize aufgeräumt?
Ansonsten, greifst du beim beenden auf einen Wert ausserhalb der Definition zu?
Wenn du mit setlength einen Wert von 5 festlegst, ist der Zugriffsbereich ja shcließlich zwischen 0 und 4 definiert ... bei Schleifen macht man da gerne Fehler.

mfG

Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 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