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 wieder freigaben (https://www.delphipraxis.net/45868-dyn-array-wieder-freigaben.html)

Christian18 13. Mai 2005 11:02


Dyn. array wieder freigaben
 
Hallo,

wie kann ich ein dyn. array nach gebrauch wieder freigeben???

Muetze1 13. Mai 2005 11:03

Re: Dyn. array wieder freigaben
 
Moin!

Initialize() vor der ersten benutzen. Freigeben dann SetLength(arr, 0); und danach ein Finalize() und die Sache ist gegessen...

MfG
Muetze1

BenBE 13. Mai 2005 20:48

Re: Dyn. array wieder freigaben
 
Werden Initialize und Finalize nicht von SetLength automatisch aufgerufen (bzw. von der Compiler-Magic bei Stackframes?

Muetze1 13. Mai 2005 23:14

Re: Dyn. array wieder freigaben
 
Moin!

1. StackFrames sind default mässig aus und ich nutze sie sehr selten in irgendwelchen Projekten.
2. Das Initialize() und Finalize() bringt bei meinm Haupt-Delphi 5 nachweisbar weniger Speicherlecks und vor allem wird dadurch der Speicher wieder freigegeben. Ich weiss nicht, ob das in den aktuelleren Delphi Versionen behoben worden ist bzw. anders ist...

MfG
Muetze1

jbg 13. Mai 2005 23:31

Re: Dyn. array wieder freigaben
 
Zitat:

Zitat von Muetze1
1. StackFrames sind default mässig aus

Das interessiert die Compiler-Magic nicht. Die richtet dir einen try/finally-Block ein um ein dynamisches Array zu referenzieren und zu dereferenzieren bzw. freizugeben.

Zitat:

2. Das Initialize() und Finalize() bringt bei meinm Haupt-Delphi 5 nachweisbar weniger Speicherlecks
Initialize und Finalize werden nur benötigt, wenn man sich um die Speicherreservierung und -freigabe selbst kümmert. Also mit GetMem/AllocMem/ReallocMem und FreeMem arbeitet anstatt mit SetLength() (dyn. Array, String) und New/Dispose (records).

Zitat:

und vor allem wird dadurch der Speicher wieder freigegeben.
Delphi 5 hatte einige Bugs, aber der wäre mir neu. Bei falscher Anwendung von Initialize und Finalize kann es zu Schutzverletzungen kommen, da die beiden Funktionen die Speicher bearbeiten (mit Nullenfüllen, gültige Daten voraussetzen) und dyn. Arrays und Strings refernzengezählt werden.


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