没有二维数组的 C 给出分割错误



有人可以解释一下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的答案以修复您的崩溃。

然后防止泄漏:

test 是一个二维数组,所以你需要先释放它的每一个子数组,然后像这样自由测试:

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

地址 "abcd" 覆盖指针test[0],这是驻留在只读区域中的静态分配数组。在test[0] = "abcd";之前和之后添加此printf("%p",test[0]);,以可视化发生的情况。

相关内容

  • 没有找到相关文章