【问题标题】:c free of two dimensional array gives segmentation faultc 没有二维数组给出分段错误
【发布时间】:2014-02-19 20:50:26
【问题描述】:

有人可以解释一下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]);

【问题讨论】:

标签: c segmentation-fault malloc free


【解决方案1】:

使用 strcpy 代替 == ,因为在这里,您只是给 test[0] 一个静态链“abcd”的地址,不能像那样取消分配。

【讨论】:

    【解决方案2】:

    请参阅@Fvirtman 的回答来修复您的崩溃问题。

    然后防止泄漏:

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

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

    【讨论】:

      【解决方案3】:

      你用"abcd"的地址覆盖了你的指针test[0],这是一个静态分配的数组,位于只读区域。在test[0] = "abcd"; 之前和之后添加此printf("%p",test[0]);,以直观地了解发生的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 2019-08-03
        • 2016-05-07
        • 1970-01-01
        • 2015-11-11
        • 2019-01-28
        • 2011-07-28
        相关资源
        最近更新 更多