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