Segfault - 指针无效

时间:2014-02-13 14:18:31

标签: c segmentation-fault

我附加了一个片段。我已经省了很多。如果需要,我会附上更多:

 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 ***

2 个答案:

答案 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