2014-02-19 44 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]);以顯示發生的情況。