Zitat von
Balu der Bär:
Nein, das eigentliche FreeAndNil(array) geht niemals schief.
Natürlich muss es schiefgehen, oder hast du schon einmal ein Array mit Destruktor gesehen
? Die einzige verbleibende Frage ist zu dem Zeitpunkt, wohin die Runtime springen wird und ob dieser Speicherbereich reserviert ist.
Folgendes Programm düfte beispielsweise Douglas-Adams-Fans erfreuen:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
p: PInteger; // Je nach Geschmack auch ein TDynIntegerArray möglich
begin
New(p);
p^ := 1111638598;
try
FreeAndNil(p);
except
Readln;
end;
Dispose(p);
end.
Wobei durch Zufall auch hier nichts passieren kann, dann p^ einfach auf 4 setzen. Damit ist jedes Gelingen ausgeschlossen
.
[add]
Oh mein Gott, macht der rote Kasten heute Blau
?
@Elivs: Ja wie, gibst du Objekte etwa nicht wie ich frei
?
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Types;
type
TDependencyObject = class // abhängig von meiner Grausamkeit
public
destructor Destroy; override;
end;
var
o: TDependencyObject;
a: TIntegerDynArray;
{ TDependencyObject }
destructor TDependencyObject.Destroy;
begin
Writeln('Hi, I''m your highly abused destructor!');
inherited;
end;
begin
o := TDependencyObject.Create;
SetLength(a, 2);
a[0] := PInteger(o)^;
a[1] := 42;
FreeAndNil(a);
Readln;
end.