![](/img/trans.png)
[英]Segmentation Fault When Assigning Values to dynamic two dimensional array in 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.