【问题标题】:C: "Invalid free(): Address 0x7feffee08 is on thread 1's stack"C:“无效的 free():地址 0x7feffee08 在线程 1 的堆栈上”
【发布时间】:2013-04-18 05:23:31
【问题描述】:

这不是我的确切代码,但本质上是这样的。我正在尝试在 main() 中创建一个堆栈变量

int **x;

我想传递给函数 foo(int **x, arg1, arg2, ...)。在某些情况下,我应该在 foo() 中为 x 动态分配空间

x = (int **) malloc(sizeof(int *) * num_elems);

我也没有为每个 int * 元素分配新空间,而是分配给它 &y,其中 int y 是在 foo() 中创建的。

当我尝试在 main() 中释放 x 时出现此错误。我不明白这是什么意思,但我怀疑可能是因为我使用了 &y?

编辑:也相关:当我尝试访问 x 的双重取消引用元素时,我得到了垃圾值。

【问题讨论】:

    标签: c segmentation-fault malloc free


    【解决方案1】:

    您没有在 main 函数中正确声明,也没有在 foo() 函数中正确定义。你必须声明为

    在主函数中

    int *x ;
    foo(&x);
    

    在 foo(int **x,....)

    *x =  malloc(sizeof(int) * num_elems);
    

    【讨论】:

      【解决方案2】:

      考虑一下,

      void foo()
      {
          int y;
          int *x = NULL;
          x = &y;
      }
      

      在这种情况下,y 存储在堆栈中。当foo 返回时,y 将不可用(取决于实现)。如果您绝对需要这样做,请改用malloc y。如果你这样做,y 将被存储在堆上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 2011-04-01
        • 2018-06-25
        • 2011-02-11
        • 2019-07-11
        • 2019-03-27
        相关资源
        最近更新 更多