簡體   English   中英

沒有二維數組的c給出分段錯誤

[英]c free of two dimensional array gives segmentation fault

有人可以向我解釋一下free(test[0])給我一個segmentation fault (core dumped)嗎? 我試圖注釋掉免費版本,然后程序正確終止(從丟失的內存中除外)。 另外,如果我注釋掉test[0] = "abcd"並再次插入free(...) ,它也將正確終止!

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]);

使用strcpy而不是==,因為在這里,您只給test [0]一個靜態鏈“ abcd”的地址,該地址不能那樣分配。

請查看@Fvirtman的答案以解決您的崩潰問題。

然后為防止泄漏:

測試是一個二維數組,因此您需要先釋放其每個子數組,然后再釋放測試,如下所示:

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

您用地址"abcd"覆蓋了指針test[0] ,該地址是靜態分配的位於只讀區域的數組。 添加此printf("%p",test[0]); test[0] = "abcd";之前和之后test[0] = "abcd"; 可視化發生的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM