- ベストアンサー
配列について
int a[100][100][100] と定義した場合にエラーが出るのですが100を変えずに配列を確保するにはどうしたらいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
■補足(mallocで3次元配列を取得する方法) int ***a; int nx=100,ny=100,nz=100; int i,j,k; a=(int ***)malloc(sizeof(int **)*nx); for(i=0;i<nx;i++){ □□a[i]=(int **)malloc(sizeof(int *)*ny); □□for(j=0;j<ny;j++){ □□□□a[i][j]=(int *)malloc(sizeof(int)*nz); □□□□for(k=0;k<nk;k++){ □□□□□□a[i][j][k]=0; □□□□} □□} } □はインデント_のがよかったかな・・・? nx,ny,nzを変えながらやるとサイズの問題なのかどうか分かると思うよ。
その他の回答 (2)
- tokichim
- ベストアンサー率42% (88/205)
一時的な大量の作業領域が必要ならmalloc()を使う。 その領域がプログラム全体で、もしくは最初から最後まで使うなら、ANo.1のようにグローバルまたはstatic変数として宣言する。
- redfox63
- ベストアンサー率71% (1325/1856)
何処で定義するのでしょう? 関数のなかでということならリンカーに与えるオプションでスタックサイズを変更しましょう 100*100*100*intのサイズ ですから intが4バイトなら 4,000,000(4百万)バイト必要です 最低でもおよそ4MBのスタック領域がないとこの変数を格納し切れません お使いのコンパイラの規定値+4MBといった設定をしてみてください 別の方法としては クラス定義や関数の外で定義するといった方法です int a[100][100][100]; int foo() { // ここで定義するなら StackSizeを変更する // int a[100][100][100]; }