Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeigt mir Delphi Speicherlecks in meinem Programm? (https://www.delphipraxis.net/2168-zeigt-mir-delphi-speicherlecks-meinem-programm.html)

Henryk 10. Jan 2003 11:51


Zeigt mir Delphi Speicherlecks in meinem Programm?
 
Bei VC sieht man am Ende immer, ob irgendwelche (mit new) angelegten Variablen nicht (mit delete) wieder frei gegeben wurde.

Gibt's sowas bei Delphi oder bin ich bis jetzt so gut und hab noch keine Speicherlecks verursacht? :wink:

Henryk

sakura 10. Jan 2003 13:21

Nein, da dieses (auch in VC) nicht verlässlich überprüft werden kann. Das geht max. mit lokalen Variablen, aber selbst da können nicht alle Möglichkeiten erkannt werden. Deshalb gibt es dieses Feature in Delphi wohl nicht, da es sonst zu der Annhame führen könnte: Ah keine Warnung, perfekt!.

Henryk 10. Jan 2003 13:43

Naja, es funktioniert unter VC recht gut. Man sieht sogar meist, wo der Speicher allokiert wurde. Natürlich gibt es auch Fälle, wo man echt schwer zu kämpfen hat (über Array-Grenzen geschrieben etc.), aber für die paar Faelle gibt's ja Rational-Purify...

Wie macht Ihr das dann? Irgendwelche Extra-Tools oder einfach Programm laufen lassen und Systemmonitor beobachten?

Henryk

sakura 10. Jan 2003 13:48

Na ja, ich mache es mir eigentlich recht einfach. Immer, wenn ich Speicher reserviere ist meine nächste Zeile ein try gefolgt von finally und der Freigabe des Speichers, gefolgt von end;.

Damit geht es ohne Probleme.
...:cat:...

Sharky 10. Jan 2003 13:51

Zitat:

Zitat von sakura
Na ja, ich mache es mir eigentlich recht einfach. Immer, wenn ich Speicher reserviere ist meine nächste Zeile ein try gefolgt von finally und der Freigabe des Speichers, gefolgt von end;.

Hat es eigentlich einen Grund das Du das Try nachem dem reservieren des Speichers machst?

[edit=Sakura]/ für den Abschluss der Quote eingefügt[/edit]

Christian Seehase 10. Jan 2003 13:53

Moin Sharky,

das die Reihenfolge

Resource belegen
try
Mit der Resource arbeiten
finally
Resource freigeben
end;

ist liegt einfach daran, dass vor dem belegen der Resource auch, z.B. im Fehlerfalle, nichts freizugeben ist.

Sharky 10. Jan 2003 13:56

Zitat:

Zitat von Christian Seehase
Moin Sharky,

das die Reihenfolge
...
ist liegt einfach daran, dass vor dem belegen der Resource auch, z.B. im Fehlerfalle, nichts freizugeben ist.


Klingt logisch. :idea:

><(((°>

^ - Mit dem Kopf an die Wand schlägt. :oops:

Henryk 10. Jan 2003 14:06

Und wie macht man das bei globalen Resourcen die man anlegt?
 
Ich hab zwar nicht diesen Fall, aber interessiert mich.

Also was weiss ich...

z.B. dynamisch irgendwelche Frames mit Create anlegen und an anderer Stelle im Programm hoffentlich wíeder freigeben?

Henryk

Daniel B 10. Jan 2003 14:17

[OT]
 
Hai Sharky,

Zitat:

Zitat von Sharky
><(((°>

^ - Mit dem Kopf an die Wand schlägt. :oops:

Das sieht dann so aus: ><(((°) :mrgreen:

Grüsse, Daniel :hi:

Christian Seehase 10. Jan 2003 14:18

Moin Henryk,

nicht alle dynamisch belegten Resourcen muss man auch selber wieder freigeben.
Wenn das Objekt ein Create(AOwner : TComponent) hat, und Du dort auch einen Owner angibst (also nicht nil), wird das Objekt automatisch zerstört, wenn der Owner zerstört wird.
In so einem Falle musst Du Dich um die Freigabe also nicht selber kümmern.

Ansonsten empfehlen sich immer für das belegen/freigeben von Resourcen immer die Kombinationen
  • OnCreate/OnDestroy (z.B. eines Formulares)
  • initialization/finalization (einer Unit)
  • try/finally evtl. try/except

Das hängt natürlich davon ab, wie lange das Objekt gebraucht wird, und von wo aus überall der Zugriff erfolgen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.
Seite 1 von 2  1 2      

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