質問 |
||
| 質問者: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 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |