有人可以解释一下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]);
,以可视化发生的情况。