ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:shoshoshos 配列について
困り度:
  • すぐに回答を!
int a[100][100][100]
と定義した場合にエラーが出るのですが100を変えずに配列を確保するにはどうしたらいいでしょうか?
質問投稿日時:08/04/30 01:33
質問番号:3986479
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:POTATO_XP ■補足(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を変えながらやるとサイズの問題なのかどうか分かると思うよ。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/05/02 15:21
回答番号:No.3
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:tokichim 一時的な大量の作業領域が必要ならmalloc()を使う。

その領域がプログラム全体で、もしくは最初から最後まで使うなら、ANo.1のようにグローバルまたはstatic変数として宣言する。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/04/30 11:43
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:redfox63 何処で定義するのでしょう?
関数のなかでということならリンカーに与えるオプションでスタックサイズを変更しましょう

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];
}
種類:回答
どんな人:専門家
自信:参考意見
回答日時:08/04/30 02:07
回答番号:No.1
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示