首页 文章

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

提问于
浏览
-1

这不是我的确切代码,但实质上就是这样 . 我正在尝试在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

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

    在主要功能

    int *x ;
    foo(&x);
    

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

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

    想想这个,

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

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

相关问题