TreeView的OnDeletion中释放结点的Data程序运行出错

ooolinux 2019-09-22 05:18:25
以下的代码,PData是省的数据,CData是市的数据,在OnDeletion中释放结点的Data,程序关闭时运行出错了。
改成在FormDestroy中遍历TreeView结点释放它的Data,几乎同样的代码,就没有问题。
为啥在TreeView1Deletion中会出错呢?
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1Deletion(TObject *Sender, TTreeNode *Node)
{/*
if(0==Node->Level&&Node->Data!=NULL)
{
PData *data=(PData *)(Node->Data);
delete data;
}
else if(1==Node->Level&&Node->Data!=NULL)
{
CData *data=(CData *)(Node->Data);
delete data;
} */
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
for(int i=0;i<TreeView1->Items->Count;++i)
{
TTreeNode *Node=TreeView1->Items->Item[i];
if(0==Node->Level&&Node->Data!=NULL)
{
PData *data=(PData *)(Node->Data);
delete data;
}
else if(1==Node->Level&&Node->Data!=NULL)
{
CData *data=(CData *)(Node->Data);
delete data;
}
}
}
//---------------------------------------------------------------------------
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2019-09-29
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
没仔细看,不过一个好的设计应该把每个Node->Data统一管理(如果Data是复杂数据结构的话),比如放在一个TList或者TObjectList中,这样Node->Data只需要存储List中的Index即可
ooolinux 2019-09-24
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争 的回复:
你现在怎么用放在List中也怎么用


放在List中应该是可以。
帮我看看这贴:
https://bbs.csdn.net/topics/394550293
  • 打赏
  • 举报
回复
你现在怎么用放在List中也怎么用
ooolinux 2019-09-24
  • 打赏
  • 举报
回复
引用 3 楼 早打大打打核战争 的回复:
没仔细看,不过一个好的设计应该把每个Node->Data统一管理(如果Data是复杂数据结构的话),比如放在一个TList或者TObjectList中,这样Node->Data只需要存储List中的Index即可


问题是不同层次的结点Data的类型要不同。
ooolinux 2019-09-23
  • 打赏
  • 举报
回复
引用 1 楼 SuperDay 的回复:
检查一些Node的取值


铖邑 2019-09-22
  • 打赏
  • 举报
回复
检查一些Node的取值

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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