4次元の配列を使いたい。
int A[80][80][80][80];
使用しようとすると、セグメンテーション エラー (コア ダンプ) が発生します。例えば:
for(i=0;i<80;i++)
for(j=0;j<80;j++)
for(k=0;k<80;k++)
for(l=0;l<80;l++)
A[i][j][k][l]=i+j+k+l;
printf("%d\n",A[0][1][2][3]);
4次元の配列を使いたい。
int A[80][80][80][80];
使用しようとすると、セグメンテーション エラー (コア ダンプ) が発生します。例えば:
for(i=0;i<80;i++)
for(j=0;j<80;j++)
for(k=0;k<80;k++)
for(l=0;l<80;l++)
A[i][j][k][l]=i+j+k+l;
printf("%d\n",A[0][1][2][3]);
これはかなり巨大な配列です -40,960,000 * sizeof(int)
バイトです。スタックで宣言している場合は、使用可能なスタック メモリがオーバーフローすることは確実です。代わりにヒープを割り当ててみてください。
int* A = malloc(80 * 80 * 80 * 80 * sizeof(int));
/* use A */
free(A);
または、ジョン・ボーデが提案したように、より良い
int (*A)[80][80][80] = malloc( sizeof *A * 80 );
for (i=0; i<SIZE; i++) {
for (j=0; j<SIZE; j++) {
for (k=0; k<SIZE; k++) {
for (l=0; l<SIZE; l++) {
A[i][j][k][l] = i+j+k+l;
}
}
}
}
printf("%d\n",A[0][1][2][3]);
free(A);