C-如何释放以下malloced内存

时间:2014-08-18 16:08:25

标签: c malloc free

有人可以帮我解决如何在这里释放二维数组的问题。我尝试使用循环释放,但我得到一个错误说:

 *** glibc detected *** ./assignment4: free(): invalid pointer: 0x0932b196 ***

事情就是当我单独释放第0个元素时,我没有遇到任何问题。但是当我释放元素[1]到[7]时,我得到了错误。

char ** stringOne; 
stringOne = malloc(sizeof(char*)*8);

stringOne[0] = malloc(sizeof(char)*6);
stringOne[0] = strtok(listofdetails[0], " ");

for(i=1;i<8;i++)
{
    stringOne[i] = malloc(sizeof(char)*6);
    stringOne[i] = strtok(NULL, " ");
}

for(i=0;i<8;i++) // FREEING memory
{
    free(stringOne[i]);
}

1 个答案:

答案 0 :(得分:9)

strtok函数返回指向您正在进行标记的字符串的指针,该指针会覆盖您先前分配的指针,导致您丢失指向已分配内存的指针。

有两种解决方案:不分配内存(不要释放),或复制到已分配的内存中。