Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#3

AW: Memoryleak durch Erstellen v. Objekt in Function()?

  Alt 1. Mär 2018, 16:34
Objekte haben keine Referenzzählung.
(Ausnahme im ARC, dann sind die wie Interfaces)


imo.Free; darfst du sowieso niemals machen, denn du hattest auch niemals diese Instanz erstellt.
> imo := pico.picture.bitmap;

Delphi-Quellcode:
pico := TPicture.Create;
pico := EingangsImage.Picture;
Speicherleck, weil du was erstellt hast und danach aber in der selben Variale was anderes speichst.

Da pico nun ebenfalls nichts von dir ist, darfst du hier auch wieder nichts freigeben. (pico.free )

Außerdem dürftest du imo sowieso "hier" nicht freigeben, da das schließlich als Result zurückgegeben wird, wo es dann knallt, wenn jemand auf dieses Result zugreifen will.
objekte als Result sind immer grenzwertig, denn wer muß, darf, soll oder darf nicht das Objekt freigeben, welches diese Funktion zurückgibt?



Zitat:
image2.Picture.Bitmap
Hier wird zwar etwas zugewiesen, aber der Setter von .Bitmap nimmt diese Instanz nicht an.
Er macht sich eine eigene komplette Kopie dieses Bittmaps. (TBitmap.Create und kopiert den Inhalt dort rein)
Daher müsste hier anschließend auch Tmp.Free; . Aber nur, wenn bildbearbeiten eine "neue" Instanz zurück gibt, die man freigeben soll.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mär 2018 um 16:39 Uhr)
  Mit Zitat antworten Zitat