ListItem是什么东西?是ListView的东西?如果它自己不管理Data的生命,则自己维护一个链表 FlsPerson,每创建一个TPersonRecPtr即加入到FlsPerson中,在FlsPerson析构时Dispose所有的TPersonRecPtr。
一个原则很简单,谁创建谁释放。

解决方案 »

  1.   

    试试看吧 
     if ListItem.Data = nil then
      begin
        new(PPerson);
        PPerson^.name := '...';
        PPerson^.sex := '...';
        ListItem.Data := PPerson;
      end;
      listitems.additem(listitem);
      despose();
      

  2.   

    我以前也对treeview 做过这样的处理
    procedure TUnitForm.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      i: integer;
    begin
      for i := 0 to TreeView1.items.count - 1 do
      begin
        Dispose(TreeView1.items[i].data);
      end;
    end;
      

  3.   

    TreeView在释放的时候不释放其Item中的Data吗?是不是一定要写代码释放?其实我用一个TList保存了所有的指针,在最后进行了释放,可好像还是有泄露,用memproof跟踪时就是new(PPerson)引起的!