一个关于指针类数据的问题!(100分)

  • 主题发起人 主题发起人 乖乖兔
  • 开始时间 开始时间

乖乖兔

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
PData = ^TData;
TData = record
recno: integer;
selfid: integer;
end;

var aData: PData
aNode: TTreeNode;
..................
New(aData);
aData^.recno := wRecno;
aData^.selfid := nRec.SelfID;

aNode := TreeView.Items.AddObjecot(nil, '节点文字', aData);
..........................................
....................
aNode.Delete;

我现在的问题是,aNode 删除后,系统会不会自动释放 aData 所占的内存空间,
也就是说,aNode.Data 所指向的内存空间能不能连带释放。


 
在Delete前先用Dispose
 
for I:= 0 to TV.Item.count -1 do
begin
if Tv.Item.Data <> nil then
begin
dispose(Tv.Item.Data);
Tv.Item.Data := nil;
end;
end;
参考一下这样做!如果是单个节点释放的话就
dispose(aNode.Data);
aNode.Data := nil;
 
可以不管,如果不放心,在treeview.ondeletion事件中加上
Dispose(Node.Data);
就释放了
 
我好象在哪个资料上看到过说会自动释放,不知道怎样去证明一下。
现在为了保险起见,就人为的先释放了。。。。。。

555555555555555555555555
 
我是这样的:
aNode:=TreeView1.Items.Add(nil,'节点文字');
aNode.Data:=aData;
...
dispose(PData(TreeView1.Items[0].Data));
也可以用链表来维护aData
 
在treeview.ondeletion事件中写
Dispose(Node.Data);
这个注意看来不错!
 
用链表来维护内存块最方便了,TData改为:
TData = record
recno: integer;
selfid: integer;
nextdata:Pointer;
priordata:Pointer;
end;
再声明一个指针变量永远指向最后一个数据块,
new一个新数据块时,将其放到链表的最后
如果是delete一个节点,则先移去对应的数据块
如果是Clear,则从后往前删除链表的每个节点。
 
接受答案了.
 
后退
顶部