为什么我对TreeNode的操作会导致内存错误?

darkfreedom 2008-08-07 09:19:02


void Updatefriend() //change
{
MainForm->isupdatefriend = true;
multimap<AnsiString,USER>::iterator iter; //指向Friendset
USER *pTemp = NULL;
TTreeNode *node,*pnode,*nextnode;
for(pnode = MainForm->PNode->getFirstChild();pnode!=NULL;pnode=nextnode)
{
nextnode = MainForm->PNode->GetNextChild(pnode);
iter = MainForm->onlineuserset.find(((PUSER)(pnode->Data))->strLockid);
if(iter==MainForm->onlineuserset.end())
{
pTemp = new USER;
memcpy(pTemp,pnode->Data,sizeof(USER));
//ShowMessage("上线"+pTemp->strName);
node = MainForm->TvFriend->Items->AddChildObject(MainForm->LNode,pTemp->strName,pTemp);
node->ImageIndex = pnode->ImageIndex;
MainForm->TvFriend->Items->Delete(pnode);
pTemp = NULL;
}
else
{
pnode->Text =iter->second.strName;
pnode->ImageIndex = iter->second.iIndexofi;
memcpy(pnode->Data,&(iter->second),sizeof(USER));
}
}
for(pnode = MainForm->LNode->getFirstChild();pnode!=NULL;pnode=nextnode)
{
nextnode = MainForm->LNode->GetNextChild(pnode);
iter = MainForm->onlineuserset.find(((PUSER)(pnode->Data))->strLockid);
if(iter!=MainForm->onlineuserset.end())
{
pTemp = new USER;
memcpy(pTemp,pnode->Data,sizeof(USER));
//ShowMessage("下线"+pTemp->strName);
node = MainForm->TvFriend->Items->AddChildObject(MainForm->PNode,pTemp->strName,pTemp);
node->ImageIndex=iter->second.iIndexofi;
MainForm->TvFriend->Items->Delete(pnode);
pTemp = NULL;
}
}
MainForm->isupdatefriend=false;


}


一次调用还行,多次调用就出不可靠的指针操作了
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppowner 2008-08-07
  • 打赏
  • 举报
回复
pTemp = NULL;
这个好像不对 ,你帮你的类的指向一个空的的?
NULL的定义是什么 ?
define NULL ((void *)0)
空指针没有分配地址。。。
虽然 你全部删除了
但是 你是不是 干了
释放总节点呢?
node->Delete(); 你干了吗?

darkfreedom 2008-08-07
  • 打赏
  • 举报
回复
无奈了!本来很简单的一个函数,功能加强了,结果现在错了一天了

604

社区成员

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

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