首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于指针删除!小弟拜谢先。解决办法

2012-01-14 
关于指针删除!小弟拜谢先。我有一段代码:UserInfo*dUserInfo*tmpnewUserInfo[nodenum+1]for(inti0i n

关于指针删除!小弟拜谢先。
我有一段代码:UserInfo*   d;
UserInfo*   tmp   =   new   UserInfo[nodenum+1];
for(int   i   =   0;i <nodenum;i++)
{
tmp[i].level   =   pUserInfo[i].level;
tmp[i].nodename   =   pUserInfo[i].nodename;
tmp[i].fathername   =   pUserInfo[i].fathername;
tmp[i].age   =   pUserInfo[i].age;
tmp[i].ID   =   pUserInfo[i].ID;
tmp[i].sex   =   pUserInfo[i].sex;
tmp[i].gfathername   =   pUserInfo[i].gfathername;
}
d   =   pUserInfo;
pUserInfo   =   tmp;

//
pUserInfo[nodenum].level   =   tmplevel;
pUserInfo[nodenum].age   =   tmpage;
pUserInfo[nodenum].fathername   =   tmpfathername;
pUserInfo[nodenum].ID   =   tmpID;
pUserInfo[nodenum].nodename   =   tmpnodename;
pUserInfo[nodenum].sex   =   tmpsex;
pUserInfo[nodenum].gfathername   =   tmpgfathername;
nodenum++;
如果不删除tmp这个指针程序没问题,就是有内存泄露,但如果我删了。
if(tmp)
{
      delete   []   tmp;
      tmp   =   NULL;
}
就会在pUserInfo[nodenum].sex   =   tmpsex;报错;
我的结构体这么定义的typedef   struct
{
CString   level;
CString   fathername;
CString   nodename;
CString   gfathername;
CString   sex;
CString   age;
CString   ID;
}UserInfo;
高手帮帮我,怎么回事呀?谢谢。

[解决办法]
pUserInfo = tmp; // 你把tmp赋给了pUserInfo

delete [] tmp; // 然后你释放了tmp,也就是释放了pUserInfo的空间

这个时候再操作pUserInfo[nodenum].sex, 也就是是操作tmp[nodenum].sex,当然会出现指针越界访问
[解决办法]
不应该删掉 tmp,内存泄漏与 pUserInfo有关吧
[解决办法]
会dump的原因见LS;
泄露的原因:
d = pUserInfo;
pUserInfo = tmp;
你不必删tmp的,
删delete d;就行了
这样就不会内存泄露了,
你在析构函数里删pUserInfo;
[解决办法]
你把tmp的值赋给了pUserInfo,就没有必要释放tmp了,最后释放pUserInfo即可。

另外,没看到你在哪里声明pUserInfo...

热点排行