我已經寫了下面的代碼,它打印一個數組。但是當輸入非常大時,例如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;
}
好的!我怎樣才能使用malloc()爲二維數組? –
malloc()以字節數保留內存。如果它是一維,二維或三維,無關緊要。例如,如果要聲明: double A [J-1] [3];例如,如果要聲明: double A [J-1] [3]; 您將擁有(J-1)* 3個字節。所以你必須使用: double * A; A = malloc((J-1)* 3); 而且您可以按照自己的需要使用它(在這種情況下,可以作爲二維陣列) – Abend
好的!非常感謝您的幫助! –