有人可以解释一下free(test[0])
给我一个segmentation fault (core dumped)
的方式吗?我试图注释掉free,然后程序正确终止(除了丢失的内存)。另外,如果我注释掉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]);
答案 0 :(得分:4)
使用strcpy而不是==,因为在这里,你只需给test [0]一个静态链“abcd”的地址,不能像那样解除分配。
答案 1 :(得分:1)
请参阅@ Fvirtman的答案以解决您的崩溃问题。
然后防止泄漏:
test是一个二维数组,所以你需要首先释放它的每个子数组,然后像这样自由测试:
for (int i=0; i<5; i++) {
free(test[i]);
}
free(test);
答案 2 :(得分:0)
用地址test[0]
覆盖指针"abcd"
,这是静态分配的数据,位于只读区域。在printf("%p",test[0]);
之前和之后添加此test[0] = "abcd";
,以便对可能发生的事情进行可视化。