我附加了一个片段。我已经省了很多。如果需要,我会附上更多:
unsigned char *datap = malloc (MAXSIZE);
unsigned char *datapor = datap;
//Here Im cutting a lot
while( (direntp = readdir(dirp)) != NULL)
{
datap = datapor;
}
//this line gives me exception
free(datap);
gcc显示:
*** glibc detected *** /home/xf/xf/unzipper: free(): invalid pointer: 0x00002aaaab0b0108 ***
答案 0 :(得分:2)
您在while循环中重新分配datap
,因此当您致电free
时,datap
不再指向已分配的内存。
(我假设datapor
的值在省略的代码中发生了变化。)
答案 1 :(得分:0)
由于宏MAXSIZE,您的malloc可能会失败。如果你没有足够的内存,这可能会失败。
开始检查datap = malloc(MAXSIZE)是否是一个可行的指针。
unsigned char *datap = malloc (MAXSIZE);
if (datap == NULL)
return -1; //malloc failed