Hola...
No veo gran problema en como asignas y liberas la memoria. Lo que si, si cierras la aplicación sin cerrar la ventana que contiene el
Treeview y esta ventana no tiene un evento
OnClose que llame al método
FreeNodes, entonces esa memoria no se libera, lo que provoca que tu aplicación tenga un llamada
"memory leak".
Ahora, te recomendaría que tu procedimiento liberar memoria lo reescribas así:
Código Delphi
[-]
procedure TfrmMain.FreeNodes(ARaiz: TTreeNode);
var
I: Integer;
RecNode: PRecNode;
begin
for I := 0 to Pre(ARaiz.Count) do
if Assigned(ARaiz[i].Data) then
begin
RecNode = PRecNode(ARaiz[i].Data);
Dispose(RecNode)
end
else
if ARaiz[i].HasChildren then
FreeNodes(ARaiz[i])
end;
El método anterior está basado en la suposición que solo el nivel 3 tiene asignada la propiedad
Data. La llamada sería:
FreeNodes(TreeView1.Root);
Toma en cuenta que estoy haciendo este método sin probarlo, así que podría tener algún error...
Saludos...