2014-02-19 45 views
1

有人可以请我解释一下free(test[0])给我一个segmentation fault (core dumped)?我试图评论免费,然后程序正确终止(除了丢失的内存)。另外,如果我注释掉test[0] = "abcd"并再次插入free(...)它也会正确终止!c免二维数组给出分段错误

char **test = (char**) (malloc(sizeof(char*) * 5)); 
for (int i=0; i<5; i++) { 
    test[i] = (char*) (malloc(sizeof(char*) * 5)); 
} 

test[0] = "abcd"; 
free(test[0]); 
+0

[不要投出malloc的结果](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – OlivierLi

回答

4

使用的strcpy,而不是==,因为在这里,你只是给测试[0]静态链“ABCD”,不能disallocated这样的住址。

1

请参阅@ Fvirtman的解决你的崩溃的答案。

然后以防止泄露:

测试是一个两个维数组,所以你需要释放它的每一个第一是子阵列然后像此免费测试:

for (int i=0; i<5; i++) { 
    free(test[i]); 
} 
free(test); 
0

你覆盖你的指针test[0]地址为"abcd",这是静态分配的数组,驻留在只读区域。在test[0] = "abcd";之前和之后添加这个printf("%p",test[0]);以显示发生的情况。