Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array löschen (https://www.delphipraxis.net/15636-array-loeschen.html)

Gabriel 1. Feb 2004 21:18


Array löschen
 
Moin,

es kann gut sein, dass es schon ein Thread zu diesem Thema gibt, aber ich hab es nicht gefunden.

Wie kann ich alle Werte aus einem Array löschen?
So wie das in der Delphi-Hilfe erklärt ist versteh ich das net...

Kann mir da einer helfen?

moin339 1. Feb 2004 21:25

Re: Array löschen
 
setlength(array, 0);

das müsste funktioniern

ciao, moin339

Jens Schumann 1. Feb 2004 22:31

Re: Array löschen
 
Hallo,
in der OH steht irgendwo MyDynArray:=Nil;
Wenn Du aber Objektreferenzen in dem Array gespeichert hast solltest Du evt. die Objekte vorher freigeben.

Jelly 2. Feb 2004 09:58

Re: Array löschen
 
Das sollte so gehn:

Code:
fillchar(MeinArray,sizeOf(MeinArray),0) ;
Gruß,
Tom

choose 2. Feb 2004 11:55

Re: Array löschen
 
Hallo Jelly,

wenn Du Records oder Arrays, die ihrerseits Datentypen wie Strings oder dynamische Arrays enthalten, so wie von Dir beschrieben leerst, untergräbst Du das Konzept der automatischen Referenzzählung und erzeugst somit "Speicherleichen". Verwende stattdessen die die Routine Finalize und ggf Anschließend eine Routine, die den Speicher "ausnullt" (zB FillChar oder ZeroMemory).

Ich glaube dieses Thema wurde hier bereits diskutiert.

teebee 2. Feb 2004 12:01

Re: Array löschen
 
Delphi-Quellcode:
MyArray := NIL;
bzw.
Delphi-Quellcode:
SetLength(MyArray,0);
sollten eigentlich reichen, der Compiler macht daraus automatisch einen Aufruf von Finalize.

Gruß, teebee

choose 2. Feb 2004 13:02

Re: Array löschen
 
Hallo teebee,

bei dynamischen Arrays sollten die Lösungen von moin339 und Jens funktionieren, weil tatsächlich implizit eine Art von Finlaize aufgerufen wird. Weil Gabriel jedoch nicht nach einer Möglichkeit Veringern der Elementanzahl auf null sondern nach einer Lösung zum Löschen aller Einträge fragte, ging ich von "normalen" (statischen) Arrays aus, bei denen die bereits beschriebenen Probleme auftreten können.

Achtung: Sollte ein Konstrukt dieser Art verwendet werden
Delphi-Quellcode:
var
  myArray: array of TMyType;
begin
  //...
  FillChar(myArray, SizeOf(myArray), 0);
wird tatsächlich nur die Referenz auf das dynamische Array mit Nullen gefüllt, so dass myArray den Wert nil hat. Allerdings wird auch hierbei die Delphi-Referenzzählung untergraben, die bei einem schlichten Aufruf der Form
Delphi-Quellcode:
myArray:= nil;
vom Compiler vorgenommen worden wäre, so dass "Speicherleichen" entstehen (können)...


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