• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列upでエラー発生,なぜ?)

配列upでエラー発生、なぜ?

charmer29-2の回答

  • ベストアンサー
回答No.1

ローカル変数はスタック上に確保されるため、 巨大な配列を確保することは(基本的には)できません。 ヒープ上に確保するか、静的に確保する必要があります。 例えば質問の例でdouble ph[maxg][ND][ND]としているところを static double ph[maxg][ND][ND]として静的に確保すれば 取り敢えずは巧くいくでしょう。 その辺りを勉強してみてはいかがでしょう。

yodel
質問者

お礼

staticを入れるとうまくいきました.ありがとうございました. このプログラムは作成中で,今後考慮しなければならないパラメータを追加しなければなりませんので,それに伴って配列も増やしていくことになります.また分からない点があれば質問させていただこうと思いますので,よろしくお願いいたします. 「静的な確保」については勉強してみたいと思います. 取り急ぎお礼まで.

関連するQ&A

  • 配列のとれる領域

    #include<stdio.h> #define X_wid 512 #define Y_wid 512 main(int argc,char *argv[]) { int x=0,y=0,X=0,Y=0,c; int input[X_wid+1][Y_wid+1],middle[X_wid][Y_wid]; FILE *fp,*fp_w;  :  : } middle[X_wid][Y_wid]配列のとる領域の値を大きくとるとエラーメッセージがでてしまいます。 [1][1]や[X_wid][Y_wid]などは正常にコンパイルできるのですが、[X_wid*2][Y_wid*2]みたいに領域を多くするとエラーメッセージがでてしまいます。 やはり、配列のとれる領域は制限があるのでしょうか? また、それでもその領域([X_wid*2][Y_wid*2)を使わなければならない時はどうすればよいでしょうか?

  • ftn77のコンパイルエラー

    ftn77でfortranのプログラムをコンパイルしたところ、 文字情報のみでテストしたらコンパイルに成功したのですが、 数値計算の入ったものをコンパイルしたら、 実行時に以下のようなエラーが起こりました。 ーーーーーーーーーーーーーーーーーーーーーーーー RUN-TIME ERROR 00401000 main [+00c5] [recur= 1] メッセージ WARNING the following symbols are missing: IMAG C:\fortran\(ファイル名).obj (C:\FORTRAN\(ファイル名).FOR) ーーーーーーーーーーーーーーーーーーーーーーーーー 元々別のパソコンでコンパイルが成功したものを、 まったく書き換えずにftn77でコンパイルしてみたのにもかかわず、 UNTIME EROORと表示されました。 原因が何か分からないので、どなたか教えてください。 ちなみに10行程度の単純なプログラムなら、数値計算をしてもエラーは怒りませんでした。

  • 初心者です。 配列のエラーがどうしても解決できません。 誰か助けてください・・・

    魔方陣のプログラムを考えて書いてみましたが、 エラーが出てしまい実行することができません。 class mahoujin{ public static void main(String args[]){ int n=3; int a[][] = new int[3][3]; int x=0; int y=1; for(int p=0;p<=3;p++){ for(int q=0;q<=3;q++){ a[p][q]=0;} } for(int i=1;i<=n*n;i++){ if((i%n)==1){x++; }else{x--; y++;} if(x==0){x=3;} if(y==3){y=0;} a[x][y]=i;} } } 空の配列や配列を外れるものがあるかをよく考えてみましたが、どうしても解決できません。助けてください・・・

  • 今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします

    今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします。なお、 各配列には整数0か1が入るとします。このとき、この配列はメモリ上の容量は いくらになるのでしょうか? 他のケース、例えば同じ次元の配列だが、各配列に1から100までの整数が入るケース や実数が入る場合など、計算できるようになりたいので、計算過程を併せて 教えていただけると幸いです。

  • C言語、配列の積

    整数型二次元配列x,yに適当な値をキーボードから入力し、次にそれらの行列の積を計算して二次元配列zに代入し、行列x,y,zの要素を出力せよ。但し、配列の大きさは最初にキーボードから入力しておき、変数宣言においては、配列の大きさを大きめに宣言しておき、キーボードから入力する配列の大きさはその範囲内で入力するようにせよ。 という問題です。よろしくお願いいたします

  • 二次元配列について

    二次元配列が確保(?)されてなくて困っています。 プログラム内で、以下のように宣言するのですが、 #define MM 1025 //プログラム6行目 #define NN 10 //7行目 double y[MM][NN]; //17行目 y[0][0] = 3.0; //28行目 Visual Studio.NET のデバッグツールの「ウォッチ」で、 y[0][0]に代入された値を確認しようとすると、 エラー:インデックス'0'は、ポインタ/配列'y'の範囲外にあります と、表示され、中身を確認することができません。 それどころか、プログラムの後半98行目を境に、 y[0][0]の値が上書きされてしまいます。 x[k] = x[0] + k*h; //98行目 ここから、察するにメモリがちゃんと確保されていないと、 思うのですが、どうすればいいかわからず、困っています。 どなたかご教授をお願いいたします。 環境 OS : Windows XP 開発環境 : Visual Studio.NET

  • Fortran の配列使用に必要なメモリについて

    Fortranで数値計算をしています。 配列に必要なメモリの計算方法について質問させてください。 例えば、real(4),real(8),real(10),integer,などでそれぞれ a(10,10) と宣言した配列を用いた計算に必要なメモリはいくらになるでしょうか? よろしくお願いします。

  • 配列の問題

    Javaを学校で習ってまだ2ヶ月ちょっとの初心者です。 困っております。 以下のようなプログラムを作成しています。 数時間かけても分からなかったので、ご回答お願いします。 1.配列(aとします)の大きさ(bとします)を、コマンドプロンプト上で指定します。 2.配列 a の i 番目の要素(0<=int i<b)に、整数値 x を代入します。 (xは、コマンドプロンプト上で指定できる、int型の任意の整数で、b個分あるような整数です。) 3.数値 x をすべて印字します。 1.は何とか分かるのですが、2.がいまいち出来ません。 なので、先に進めず、困っております。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列について

    こんにちは。 int p[1000]という整数型の配列を作成しました。 例えば、 p[0] = 1; p[1] = 2; p[2] = 3; ・ ・ ・ p[99] = 100; を格納し、配列の長さ?を調べる際、 unsigned int len = 0; while(p[len]!='\0') len++; とすることで調べることが可能でしょうか?p[100]番以降に0が格納されている場合それがナル文字となるのでしょうか? また、char c[1000]と文字列型の配列を作成し、文字列の数値を格納していく場合、一桁であれば要素1個(1Byte?)で格納できますが、二桁以上であれば要素2個以上(2Byte以上←あっていますでしょうか)必要です。 c[0]='1' c[1]='2' c[2]='3' c[3]='4' ・ ・ ・ c[9]='1' c[10]='0' c[11]='1' c[12]='1' ・ ・ ・ ここで問題なのですが、文字列10と文字列11の判別はできないのでしょうか? 110111が連続している場合も値110と値111と判別できないのでしょうか? 値を格納する場合は、整数型のint c[1000]を用意するという事でしょうか? よろしくお願いします。

  • ExcelVBAで配列をベースに配列を作る方法について

    配列2つからそれぞれ要素を取り出して組み合わせ、 新たな配列を作りたくて下記のコードを書きましたが どうしても★のところで「コンパイルエラー:SubまたはFunctionが定義されていません。」 というエラーになってしまいます。すごく基本的なミスのようでお恥ずかしいのですが、 どうか解決方法・アドバイスをお願いいたします。m(_ _)m なお、最終的に作りたい配列の中身は下記のような規則性を持ったものです。 (後からもっと増やす予定なのでループでの処理を希望しています。) 'RankFirstCell = Array("B10", "B26", "B42", "B58", "B74", "H10", "H26", "H42", "H58", "H74", "N10", "N26", "N42", "N58", "N74") --- 問題の部分はここから --- Dim RankCols, RankRows As Variant RankCols = Array("B", "H", "N") RankRows = Array(10, 26, 42, 58, 74) Dim x, y, z As Byte Dim RankFirstCell(14) As String 'ここの記述の仕方の問題でしょうか? For x = 0 To 14 y = Application.WorksheetFunction.RoundDown(x / 5, 0) z = x Mod 5 RankFristCell(x) = RankCols(y) + RankRows(z) '★エラー行 Next x --- ここまで --- ちなみにx, y, zの値は下記のように希望通りループできているみたいです。(ウォッチウィンドウにて確認) x|y|z ------ 0|0|0 1|0|1 2|0|2 3|0|3 4|0|4 5|1|0 6|1|1 7|1|2 8|1|3 9|1|4 10|2|0 11|2|1 12|2|2 13|2|3 14|2|4 どうぞよろしくお願いいたします。