C语言 如何解除分配指向保存地址的指针的指针



我正在尝试释放fe。使用 Valgrind 时,我得到 fe 的"无效 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;
}

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

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

你应该使用

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

或者,为了更好,

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

但是,如前面的评论中所述,此处介绍的代码还有其他问题[缺少i的定义,j]。

相关内容

  • 没有找到相关文章

最新更新