2014-01-06 17 views
1

我已經寫了下面的代碼,它打印一個數組。但是當輸入非常大時,例如J = 40000,我會發生分段錯誤。你能告訴我爲什麼會發生?這是因爲數組的維數太大,還是我做錯了什麼?當輸入非常大我得到分割錯誤

int main(){ 

    int i,j,J; 
    printf("Give the number J: \n"); 
    scanf("%d", &J); 

    double k[J-1]; 
    double d[J-1]; 
    double p[J-1]; 
    double A[J-1][3];  
    double h=1.0/(double)J; 

    for(j=0; j<J-1; j++){ 
     k[j]=-1.0/(h*h); 
     d[j]=2.0/(h*h); 
     p[j]=-1.0/(h*h); 
    } 


    for(j=0; j<J-1; j++){ 
     A[j][0]=k[j]; 
     A[j][1]=d[j]; 
     A[j][2]=p[j]; 
    } 


    A[0][0]=0.0; 
    A[J-2][2]=0.0; 

    for(j=0; j<J-1; j++){ 
     for(i=0; i<3; i++){ 
     printf("%lf ",A[j][i]); 
    } 
    printf("\n\n"); 
} 
return 0; 
} 

回答

0

如果您使用C語言編程(而不是C++),則在程序中間聲明變量可能會給您帶來問題。嘗試使用malloc()來製作動態數組。

還有一個問題,我可以看到的是在接下來的一句:

A[J-2][2]=0.0; 

如果J = 1例如,它會爲你帶來問題,因爲指數將低於0

+0

好的!我怎樣才能使用malloc()爲二維數組? –

+0

malloc()以字節數保留內存。如果它是一維,二維或三維,無關緊要。例如,如果要聲明: double A [J-1] [3];例如,如果要聲明: double A [J-1] [3]; 您將擁有(J-1)* 3個字節。所以你必須使用: double * A; A = malloc((J-1)* 3); 而且您可以按照自己的需要使用它(在這種情況下,可以作爲二維陣列) – Abend

+0

好的!非常感謝您的幫助! –