-1

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

诠释**x;

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

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

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

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

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

4

2 回答 2

1

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

在主函数中

int *x ;
foo(&x);

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

*x =  malloc(sizeof(int) * num_elems);
于 2013-04-18T05:28:09.440 回答
0

考虑到这一点,

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

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

于 2013-04-18T05:58:16.603 回答