我正在试图释放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;
}
答案 0 :(得分:3)
看到double *X;
,我认为问题就在这里
X = malloc(2 * sizeof(double *));
你应该使用
X = malloc(2 * sizeof(double));
或者,为了更好,
X = malloc(2 * sizeof(*X));
但是,正如前面评论中所述,此处提供的代码还有其他问题[缺少i
,j
]的定义。