繁体   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