Vielleicht noch ein Beispiel:
Delphi-Quellcode:
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Add('Hallo');
ShowMessage(IntToStr(sl.Count));
sl.Free;
ShowMessage(IntToStr(sl.Count));
end;
Hier gibt es u. U. keine Fehlermeldung, obwohl das Objekt freigegeben wurde, bzw. es wurde nur das Objekt freigegeben, ohne jedoch die Adresse zu löschen. U.U. hat sl also noch die alte Adresse und die zeigt ins Nichts und das Programm funktioniert mit Fehler, liefert also falsche Daten.
Delphi-Quellcode:
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Add('Hallo');
ShowMessage(IntToStr(sl.Count));
FreeAndNil(sl);
ShowMessage(IntToStr(sl.Count));
end;
Hier wird auch die Adresse von sl gelöscht, genilt, bzw. auf 0 gesetzt. Hier gibt es eine Fehlermeldung.