[英]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.