c - 如何释放指向保存地址的指针的指针

标签 c malloc valgrind

我正在尝试释放 fe。使用 Valgrind 时,我收到 fe 的“invalid free()”错误。如果我试图释放指向保存地址而不是 double 指针的指针,有什么不同吗?

int main()
{
    double **fe = 0; int i,j;
    fe = malloc(10 * sizeof(double *));
    for (i = 0; i < 10; i++)
    {
        fe[i] = malloc(10 * sizeof(double));
    }
    double *X; X = malloc(2 * sizeof(double));
    X[0] = 0; X[1] = 2;
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
        {
            fe[i][j] = X[1];
        }
    }

    free(X);

    for (j = 0; j < 10; j++)
    {
        free(fe[j]);
    }

    free(fe);

    return 0;
}

最佳答案

看到double *X;,我觉得问题就出在这里

X = malloc(2 * sizeof(double *));

你应该使用

X = malloc(2 * sizeof(double));

或者,为了更好,

X = malloc(2 * sizeof(*X));

但是,如前面的评论所述,此处显示的代码还存在其他问题 [缺少 ij 的定义]。

关于c - 如何释放指向保存地址的指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27632770/

相关文章:

c - 驯服 malloc/free 野兽——提示与技巧

c - 为什么读取结构体指针字段无效?

c - valgrind block 肯定丢失在丢失记录中

C++ 或 Cython 内存泄漏?

c - 通过将函数定义为空宏来在编译期间删除函数

根据值干净地访问结构数组

创建一个链表来注册 C 学生

c - 无法将字符串保存到指向数组的指针中

C编程: malloc() inside another function

c - malloc 对象上的 Free throws 错误