- ベストアンサー
配列の添え字の最大数とは?
調べた範囲で分からなかったので質問します。C言語で double a[N][N]={0}; のように、2次元配列を使って数値計算をしているのですが、Nの値を変更していったとき、Nが250を越えたあたりからプログラムが動かなくなってしまいました。正確には実行しても何もされずにプロンプトが帰ってきてしまいます。 N=255までは実行できました。 そこで質問なんですが、C言語の配列の添え字には限界が定められているのでしょうか?限界が規定されている場合、それはいくつまでで、それを越えて添え字を設定することは可能でしょうか? データを取る関係上、添え字を少なくとも1万程度にしたいと思っています。 ご回答お願いします。 実行環境 windows XP HE SP2 : intel core duo 1.60GHz : メモリ1GB コンパイラ Borland C++ 5.5.1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
上限はありませんが 変数を宣言する位置により確保できるかが決まります 関数の中やクラス宣言の中などですととれない場合があります これは スタック上に確保しようとするためです mallocなどで動的に確保するか 関数やクラスの定義の外で確保しましょう // こちらはヒープ上に確保 doube b[256][256]; int main(int argc, char *argv[]) { // こちらはスタック上に確保 double a[256][256]; } マニュアルなどで変数の確保領域が何処に取られるのかを確認しましょう
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
> Nが250を越えたあたりからプログラムが動かなくなってしまいました。 コードを提示してくださると、どこに問題があるかがもしかすると わかるかもしれません。 > C言語の配列の添え字には限界が定められているのでしょうか? 言語仕様上の限界はないと思います。 > 限界が規定されている場合、それはいくつまでで、それを越えて添え字を設定することは可能でしょうか? 仮に限界を規定しているとすると、それを超えた添字を設定することは 理論上不可能です。 なぜなら、そこが上限なのですから。
お礼
ご回答ありがとうございます。言語仕様上の限界はないということですね。それが知りたかったのであとは自分で原因を考えたいと思います。ありがとうございました。
お礼
ご回答ありがとうございます。言語仕様上の限界はないということですね。記述場所によって確保される領域が変わるんですね。知らなかったので調べときます。言語仕様に限界があるかを知りたかったのであとは自分で原因を考えたいと思います。ありがとうございました。