Immer schön langsam abschreiben...:
Wenn du etwas lokal erzeugst, lokal verwendest und lokal wieder freigbist dann deklarier es auch lokal. Sonst geht dir später der Überblick verloren.
Mit Nil gibst du nix frei!! Wenn du etwas manuell erzeugst (mit Create) dann musst du es auch manuell wieder freigeben und das am besten mit FreeAndNil(DeinStream).
Assigned(DeinStream) überprüft nur ob das Objekt überhaupt kreiert wurde..
Assigned gibt wenn es das Objekt gibt true zurück deswegen steht das in ne if Anweisung.
Wenn das Objekt nicht erstellt wurde wird es auch nicht freigeben.
Benenne Lokale Variablen am besten mit einem l davor für lokal. Nur so als Tipp
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var lMyStream: TMemoryStream; begin try lMyStream := TMemoryStream.Create; finally if assigned(lMyStream) then FreeAndNil(lMyStream); end; end; |
@alzaimar
Ok du hast recht man kann es auch vorher schreiben... Deswegen auch die Überprüfung mit assigned. Somit ist das wieder ok.
EDIT: Soviel zum Thema FreeAndNil:
www.delphi-forum.de/...highlight=freeandnil
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.