2014-12-24 188 views
0

我正试图释放fe。当使用Valgrind时,我得到“无效的免费()”作为错误。有没有什么区别,如果我试图释放指针保存地址而不是双重指针?如何释放指向保存地址的指针的指针

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

请正确缩进您的代码。它会帮助我们阅读。谢谢。 –

+1

无法重现。你的实际代码在哪里? (例如,我和j在这段代码中没有任何声明。) –

+0

对不起,马虎。我做了一些编辑。 (实际代码非常大,所以我已经复制了它的一个简单版本。) – user163917

回答

3

通过观察double *X;,我认为这个问题是在这里

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

你应该使用

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

,或者更好的,

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

然而,还有其他问题[missi ng定义i,j],并在此处显示您的代码,如前面的注释中所述。

+0

@abhineet感谢您的修复。 :-) –

+0

它的小朋友:-) – Abhineet