AGB  ·  Datenschutz  ·  Impressum  







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

Dyn. array wieder freigaben

Ein Thema von Christian18 · begonnen am 13. Mai 2005 · letzter Beitrag vom 13. Mai 2005
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Dyn. array wieder freigaben

  Alt 13. Mai 2005, 11:02
Hallo,

wie kann ich ein dyn. array nach gebrauch wieder freigeben???
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Dyn. array wieder freigaben

  Alt 13. Mai 2005, 11:03
Moin!

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

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von BenBE
BenBE

Registriert seit: 3. Apr 2005
Ort: Jahnsdorf
48 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Dyn. array wieder freigaben

  Alt 13. Mai 2005, 20:48
Werden Initialize und Finalize nicht von SetLength automatisch aufgerufen (bzw. von der Compiler-Magic bei Stackframes?
Benny Baumann
Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Dyn. array wieder freigaben

  Alt 13. Mai 2005, 23:14
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Dyn. array wieder freigaben

  Alt 13. Mai 2005, 23:31
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.
  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 22: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