Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

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

  Alt 1. Mär 2018, 17: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.
$2B or not $2B

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