TreeView的节点指向数据的释放问题(100分)

sunbn 2002-11-08 03:50:16
Delphi帮助中有下面的Example:
procedure TForm1.Button1Click(Sender: TObject);

var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
elseif (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then
Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);

end;
end;

//New(MyRecPtr);这句创建了指针,然后赋给TreeNode.Data,之后我们可以如下使用这个数据:
procedure TForm1.Button2Click(Sender: TObject);

begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;

~~~~~~~~~~~~
请问:程序结束的时候是否需要遍历TreeView的节点释放掉这个Data指向的数据呢?
还是Delphi会自己释放它?为什么?
担心会有内存泄漏所以问问大家? 100分敬上。
...全文
179 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tommyjian 2002-11-09
  • 打赏
  • 举报
回复
TreeView.Items.clear只能清除node,而不能清除与node相关的object
tommyjian 2002-11-09
  • 打赏
  • 举报
回复
是的,必须释放内存,否则便出现漏洞。
这和TStringGrid的Objects数组一样,在运行时将某一对象与某一单元格相关时,在TStringGrid被释放之前,这些对象必须被释放,否则就有可能造成对象失去指针引用,造成对象长时间滞留内存
fenglic 2002-11-09
  • 打赏
  • 举报
回复
如果是赋值给Node.Date的话,最好还是逐个释放它。遍历节点,然后free或者delete它。好像可以用TreeView.Items.clear一举释放它?
sunbn 2002-11-09
  • 打赏
  • 举报
回复
我在大富翁上已经得到答案了。
必须自己释放,
遍历节点,然后FreeMemory(TreeNodes.item[i].Data);
CSDN,哎……

flyhigh:20
blueshu:10

剩下的分,谁灌我这片帖子的水,给谁5分,哼哼。

blueshu 2002-11-09
  • 打赏
  • 举报
回复
不会的
flyhigh 2002-11-09
  • 打赏
  • 举报
回复
在VC中是不会自动释放的,必须手工删除。可以采用递规来遍历每一个结点。
xzhifei 2002-11-09
  • 打赏
  • 举报
回复
不用担心这方面的问题,TreeView是一个非常优秀的控件!!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧