读书人

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

发布时间: 2012-01-14 20:02:35 作者: rapoo

关于指针删除!小弟拜谢先。
我有一段代码: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...

读书人网 >VC/MFC

热点推荐