我应该怎么回收这样的内存
char *pLot[BATCHNEWPART_MAX_LOT];
for(i=0; i<BATCHNEWPART_MAX_LOT; i++)
{
pLot[i]=new char[LOTIDLEN+1];
memset(pLot[i], 0, sizeof(pLot));
}
.....
for(i=0; i<BATCHNEWPART_MAX_LOT; i++)
{
delete pLot[i]; //这样写,运行过程中,似呼不行,我应该怎么写?
}
问题点数:0、回复次数:2Top
1 楼BAisNobody(前不见古人,后不见来者)回复于 2004-09-10 19:35:56 得分 0
内存写操作越界! 破坏了内存控制块,导致释放内存错误!
越界操作是 memset(pLot[i], 0, sizeof(pLot)); 导致的
sizeof(pLot)的值是 4 * BATCHNEWPART_MAX_LOT (如果指针变量是4个字节),
而不是你所期望的pLot[i]所指向的数组大小,不知道是你太粗心了呢还是
对数组和指针理解错误。
这里正确的初始化语句应该是 :
memset(pLot[i], 0, sizeof(char) * (LOTIDLEN+1));
这样就正常了。
Top
2 楼jxhwei(工羊大盗)回复于 2004-09-10 23:30:25 得分 0
delete[] pLot;//在析构函数里这样写就可以了,for循环也可以不要Top




