OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VC++6.0での配列の動作不良

  • すぐに回答を!
  • 質問No.196523
  • 閲覧数243
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 55% (52/94)

現在、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を数字で表すとこのエラーが生じず、普通に実行されます。なぜこのようなことが起こるのでしょうか?
どなたか教えていただければ幸いです。お願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 40% (201/496)

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

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 40% (201/496)

配列はどこで宣言されていますか? 関数内に宣言しているのであれば、スタックオーバーフローの可能性があります。static で領域を確保するようにしてみてください。 ...続きを読む
配列はどこで宣言されていますか?
関数内に宣言しているのであれば、スタックオーバーフローの可能性があります。static で領域を確保するようにしてみてください。
お礼コメント
asamaken

お礼率 55% (52/94)

ご回答ありがとうございます。
おっしゃるとおりオーバーフローしているようでした。
staticで宣言するとうまくいきました。
ありがとうございました。
投稿日時 - 2002-01-12 12:30:35
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ