Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Free bei 2 Objekten mit derselben Referenz -> Ungültige Zeigeroperation

  Alt 15. Apr 2017, 19:06
Und weshalb kann ich den Speicher über
obj1.Free mehrfach freigeben, aber nicht über obj2.Free?
Nein.

FreeAndNil setzt auch due Variable auf NIL und Free/FreeAndNil machen nichts mehr wenn die Variable schon NIL ist.

Delphi-Quellcode:
obj := TTestKlasse.Create;
obj.Free;
obj.Free; // peng

obj := TTestKlasse.Create;
obj.Free;
obj := nil;
obj.Free; // nicht peng

obj := TTestKlasse.Create;
FreeAndNil(Obj);
obj.Free; // nicht peng

obj := TTestKlasse.Create;
FreeAndNil(Obj);
FreeAndNil(Obj); // nicht peng
Ob die Variable nun obj heißt oder ob es eine "Kopie" obj2 gibt, ist hierbei unerheblich ... es kommt immer auf das selbe Prinzip hinaus.

Delphi-Quellcode:
obj := TTestKlasse.Create;
obj2 := obj
obj.Free; // oder FreeAndNil(obj);
obj2 := nil;
obj2.Free; // nicht peng
Delphi-Quellcode:
obj := TTestKlasse(123456789);
obj.Free; // peng, weil der Zeiger nicht auf eine Objektinstanz zeigt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Apr 2017 um 19:08 Uhr)
  Mit Zitat antworten Zitat