Jap, so in etwa dachte ich mir das.
Finalize scheint aber auch nicht zu funktionieren.
Jedenfalls nicht, wenn das Record eine ThreadVar ist.
Zumindest meldet FastMM danach noch Speicherlecks.
Edit:
Zitat von
Hansa:
Du beweist, dass man jedes noch so simple Problemchen derart verunstalten kann, dass es eventuell nicht mal richtig funktioniert.
Delphi-Quellcode:
MyRecord.nr := 1;
MyRecord.name := 'XYZ';
memo2.Lines.Add(IntToStr(MyRecord.nr));
memo2.Lines.Add('*'+MyRecord.name+'*');
memo2.Lines.Add('');
FillChar (MyRecord,SizeOf (MyRecord),0);
memo2.Lines.Add(IntToStr(MyRecord.nr));
memo2.Lines.Add('*'+MyRecord.name+'*');
Das ergibt das im Anhang.
Damit beweist du nur, dass der Pointer auf den eigentlichen String nicht mehr existiert.
Ob der String damit aber wirklich freigegeben wurde, wird daraus nicht deutlich.