P := Sender.getNodeData(Node);
if Assigned(P) then
Unnütz. Sender.GetNodeData liefert hier nie nil, da weder Node=nil, noch Node=RootNode, noch NodeDataSize=0 ist, denn OnFreeNode wird für diese Konstellation nicht aufgerufen.
Zitat:
P^ := nil; // zur Sicherheit
Zur Sicherheit kann man den Speicherbereich direkt vor der Freigabe auch noch mit Nullen füllen.
Wenn man sich TVirtualNode mal anschaut:
Delphi-Quellcode:
TVirtualNode = packed record
Index,
ChildCount: Cardinal;
// ...
LastChild: PVirtualNode;
Data: record end;
end;
dann sieht man, dass Sender.GetNodeData (vereinfacht) @Node.Data zurückliefert und das "P^ := nil" nichts anderes ist, als die 4 bzw. 8 Byte die hinter Data sind mit Nullen zu überschreiben. Und das direkt vor der Freigabe des Speicherbereichs.
**Sorry, hab mich nur gerade über eine viel zu langsame Migration geärgert, die, wenn ordnetlich programmiert, in 3 Minuten erledigt wäre und nicht wie jetzt, die ganze Nacht durchlaufen muss**