• ベストアンサー

配列について

int a[100][100][100] と定義した場合にエラーが出るのですが100を変えずに配列を確保するにはどうしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • POTATO_XP
  • ベストアンサー率10% (24/230)
回答No.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)
回答No.2

一時的な大量の作業領域が必要ならmalloc()を使う。 その領域がプログラム全体で、もしくは最初から最後まで使うなら、ANo.1のようにグローバルまたはstatic変数として宣言する。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

何処で定義するのでしょう? 関数のなかでということならリンカーに与えるオプションでスタックサイズを変更しましょう 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]; }

関連するQ&A