![]() |
Variablen in Procedure freigeben.
servus,
habe in meiner Anwendung irgend wie einen Speicherfresser. Mache das zur Zeit so
Delphi-Quellcode:
da müste doch eigentlich die Daten freigegeben werden, oder?
Procedure MachWas(var data : TmeineKlasse);
begin //.. irgend was data.free; end; procedure Timer; var data : TmeineKlasse; begin data := TmeineKlasse.create; data.bla := bla; MachWas(data); end; Mfg |
Re: Variablen in Procedure freigeben.
na super habe meinen Fehler gefunden......
Habe eine Procedure übergeben und da habe ich die Klasse nicht freigegeben.... |
Re: Variablen in Procedure freigeben.
Zitat:
B: nach dem du das Objekt frei gegeben hast setze die Variable auf nil. Somit gibt es keinen Ärger, wenn du später auch mal prüfen willst, ob die Instanz frei gegeben wurde. entweder:
Delphi-Quellcode:
oder so:
data.free;
data := nil;
Delphi-Quellcode:
Gruß oki
FreeAndNil(Data);
|
Re: Variablen in Procedure freigeben.
und gib die Daten dort frei, wo du sie erstellt hast!!
Delphi-Quellcode:
Procedure MachWas(var data : TmeineKlasse);
begin //.. irgend was // data.free; end; procedure Timer; var data : TmeineKlasse; begin data := TmeineKlasse.create; data.bla := bla; MachWas(data); data.Free; end; |
Re: Variablen in Procedure freigeben.
Und damit das ganze auch im - wie immer unwahrscheinlichen - Fehlerfall passiert, nutze try/finally:
Delphi-Quellcode:
procedure Timer;
var data : TmeineKlasse; begin data := TmeineKlasse.create; try data.bla := bla; MachWas(data); finally data.Free; end; end; |
Re: Variablen in Procedure freigeben.
Oder benutze Schnittstellen, und aus diesem Code
Delphi-Quellcode:
wird dieser, wieder etwas kompaktere, Code:
procedure Timer;
var data : TmeineKlasse; begin data := TmeineKlasse.create; try data.bla := bla; MachWas(data); finally data.Free; end; end;
Delphi-Quellcode:
Am Ende der Methode wird der Speicher automatisch wieder freigegeben - aber Vorsicht, wenn in MachWas eine Referenz auf das Data Objekt 'behalten' wird, kann es dennoch zu Speicherlecks kommen.
procedure Timer;
var Data: IMeinInterface; begin Data := TMeineKlasse.Create; Data.Bla := Bla; MachWas(Data); end; |
Re: Variablen in Procedure freigeben.
Zitat:
Schau dir mal Muetzes Code an. Da sieht man auf einem Blick was mit dem Object passiert und kommt nicht ins grübeln ob und wann das Objekt frei gegeben wird/muss. Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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