free出错一般都有哪些原因?
void CDataConvert::PStrsDestroy(char** papszStrList)
{
char **papszPtr;
if (papszStrList)
{
papszPtr = papszStrList;
while( *papszPtr )
{
free(*papszPtr);
*papszPtr = NULL;
papszPtr++;
}
if( papszStrList )
{
free(papszStrList);//有时总在这里出错
papszStrList = NULL;
}
}
}
papszStrList是在外面malloc或realloc的空间,这个函数的主要功能是想释放内存,可总是在free(papszStrList);出错
[解决办法]
可能指针指向的内容已经被释放~
[解决办法]
papszPtr++;
有可能在这里有问题
[解决办法]
PStrsDestroy可能被多次调用了!下面的if的判断是不起作用的:
if( papszStrList )
{
free(papszStrList);//有时总在这里出错
papszStrList = NULL;
}