Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TBitmap free? Invalid Pointer Operation

  Alt 9. Okt 2007, 11:20
Die Einwände wären lediglich das du wohl nicht weiß warum das so ok ist. Ansonsten ist es ok

folgendes ist dein Ausgangspost:
Delphi-Quellcode:
var
  bmp : TBitmap;

begin
  bmp := TBitmap.Create; //1
  bmp := Image1.Picture.Bitmap; //2
  
  (snip)

  bmp.free; //3
end;
zu beachten ist aber das Image1.Picture.Bitmap von Image1 (TImage) bereits erstellt (TBitmap.Create()) wurde.

genau genommen machst du im Ausgangspost folgendes:
1.) Du forderst Speicher an und weißt merkst dir die Adresse darauf in der Variablen "bmp"
2.) Du lässt die Variable "bmp" jetzt auf Image1.Picture.Bitmap zeigen. Jetzt zeigt aber nichts mehr auf den zuvor angeforderten Speicher der mit "TBitmap.Create" angefordert wurde. Dadurch kannst du den Speicher nicht mehr frei geben und hast ein Speicherleck
3.) Du gibst den Speicher frei welchen Image1 (TImage) angefordert hat. Du solltest aber generell nur Dinge frei geben die du auch selbst angefordert hast. Das hattest du sicher auch vor was aber durch
bmp := Image1.Picture.Bitmap; in die Hose geht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat