2014-12-24 236 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