Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.432 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 16:00
if bmp1=nil then bmp1.free;

Das ist Unsinn. Wenn bmp1 = nil ist, dann darf man durchaus Free aufrufen, es tut nur nichts.
bmp1.Free ohne Bedingung direkt aufzurufen ist also durchaus richtig.

bmp1.free löscht das Objekt, setzt aber die Variable bmp1 nicht auf nil.
bmp1 verweist danach auf einen ungültigen Speicherbereich.
Wird bmp1.free danach ein weiteres mal aufgerufen, erscheint deshalb die Fehlermeldung.

Man kann statt dessen FreeAndNil(bmp1) verwenden.
Dadurch wird sowohl das Objekt als auch die Variable gelöscht, das entspricht:
bmp1.Free;
bmp1 := nil;

Danach ist der erneute Aufruf von bmp1.Free immer zulässig, es gibt aber nichts freizugeben.
  Mit Zitat antworten Zitat