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分敬上。

解决方案 »

  1.   

    不用担心这方面的问题,TreeView是一个非常优秀的控件!!
      

  2.   

    我在大富翁上已经得到答案了。
    必须自己释放,
    遍历节点,然后FreeMemory(TreeNodes.item[i].Data);
    CSDN,哎……flyhigh:20
    blueshu:10剩下的分,谁灌我这片帖子的水,给谁5分,哼哼。
      

  3.   

    如果是赋值给Node.Date的话,最好还是逐个释放它。遍历节点,然后free或者delete它。好像可以用TreeView.Items.clear一举释放它?
      

  4.   

    是的,必须释放内存,否则便出现漏洞。
    这和TStringGrid的Objects数组一样,在运行时将某一对象与某一单元格相关时,在TStringGrid被释放之前,这些对象必须被释放,否则就有可能造成对象失去指针引用,造成对象长时间滞留内存
      

  5.   

    TreeView.Items.clear只能清除node,而不能清除与node相关的object