現在、VC++6.0のWin32 Console Applicationプロジェクトでプログラムを書いているのですが、配列の様子がおかしいです。
具体的に言うと、ヘッダで

#define N 10
#define NN (2*N*2*N)

double A[NN+1][NN+1],S[NN+1][NN+1];
double B[NN+1],C[NN+1];

と配列を宣言しているのですが、A,B,Cそれぞれの配列への値の書き込みは普通に行えるのですが、
Sに値を書き込んでいる最中にプログラムが強制終了していまします。エラーメッセージなどはでません。
デバッグすると、Sに値を書き込むfor文の繰り返しの最後のほうに

バンドルされていない例外は***.exeにあります。0xC0000005:Access Violation

というメッセージが出てそこでプログラムが終了してしまいます。なぜでしょうか?
AとSのfor文はまったく同じで、SかわりにAを使うと、このエラーは生じません。
またヘッダで、

#define N 10
#define NN 400

double A[NN+1][NN+1],S[NN+1][NN+1];
double B[NN+1],C[NN+1];

とNNを数字で表すとこのエラーが生じず、普通に実行されます。なぜこのようなことが起こるのでしょうか?
どなたか教えていただければ幸いです。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

締め切られていないようなので補足しますと。


---
auto変数にてスタックに領域を確保する場合は linkパラメータでstack領域を増やすことで解決します。が、お薦めしません。
一時的に領域を確保し、計算終了後に領域を解放するのであれば、malloc(or new)で確保、free(or delete)で解放が望ましいです。
    • good
    • 0

配列はどこで宣言されていますか?


関数内に宣言しているのであれば、スタックオーバーフローの可能性があります。static で領域を確保するようにしてみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おっしゃるとおりオーバーフローしているようでした。
staticで宣言するとうまくいきました。
ありがとうございました。

お礼日時:2002/01/12 12:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報