![]() |
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 |
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!.
|
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 |
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:... |
Zitat:
[edit=Sakura]/ für den Abschluss der Quote eingefügt[/edit] |
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. |
Zitat:
Klingt logisch. :idea: ><(((°> ^ - Mit dem Kopf an die Wand schlägt. :oops: |
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 |
[OT]
Hai Sharky,
Zitat:
Grüsse, Daniel :hi: |
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
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 02:30 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