C:“无效的free():地址0x7feffee08在线程1的堆栈上”

时间:2013-04-18 05:23:32

标签: c segmentation-fault malloc free

这不是我的确切代码,但实质上就是这样。我正在尝试在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的双重引用元素时,我得到了垃圾值。

2 个答案:

答案 0 :(得分:1)

您未在main函数中正确声明,并且未在foo()函数中正确定义。你必须声明为

在主要功能

int *x ;
foo(&x);

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

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

答案 1 :(得分:0)

考虑一下,

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

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