如何解除指向保存地址的指针的指针

时间:2014-12-24 06:51:50

标签: c malloc valgrind

我正在试图释放fe。当使用Valgrind时,我得到“无效的free()”作为错误。如果我试图释放一个指向指针保存地址而不是双精度的指针有什么区别吗?

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;
}

1 个答案:

答案 0 :(得分:3)

看到double *X;,我认为问题就在这里

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

你应该使用

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

或者,为了更好,

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

但是,正如前面评论中所述,此处提供的代码还有其他问题[缺少ij]的定义。