最速怪談選手権

プログラムのデータ量を増やしたところ、エラーが起こりました。
減らせば流れることから、スタックオーバーフローと呼ばれるものかと思います。
スタックサイズが初期値のままなのが原因だと予想したのですが、この変更方法がどうにもわかりません。

もしよろしければ、スタックサイズの変更方法を教えてください。
また、別の対処方法をご存知でしたらそちらでも結構です。

ソフトはMicrosoft Visual stdio 2008のC++です。
どうぞよろしくお願いします。

A 回答 (4件)

データ量を増やしたら、ってあるけど


どういう方法なのかが書かれてないね。
読み込みデータ量の事?
それともプログラム自体で書いてある確保領域の事?

前者なら読み方を工夫するように書き換えないとだめ
後者なら………もう少しどうやってるのか明確に判らないと書きようがないけどメモリ確保を明示的にやらないとだめかも。
    • good
    • 0

スタックサイズの変更は簡単だけど根本原因ではないかもしれないので実は後回しにした方がいいと思う. つまり, まずはプログラムを見直すべきでしょう.


・処理の本質としてそんなにスタックを必要とするのか, それともプログラムが腐っていてスタックを食いつぶしているのかを確認しましょう.
・本当にそれだけのデータが必要なのか, 実際にはそのデータのうちの一部だけでいいのかというのも重要な点となります.
・プログラムとしてどうしても大量のデータが必要で, 実行時にメモリを確保すればいいというのであれば STL を使ってメモリ管理を行うのが簡単.
本当にどうにもならないならしょうがないのでスタックサイズを変更することになります. スタックサイズの変更はコマンドラインのコンパイラなら cl /? で出てくるオプションの一覧から探してください. Visual Studio の統合環境でも, プロパティを見ればそのうち見つかるはず.
    • good
    • 0

参考URLにスタックサイズの変更方法が記載されています。


但し、このエラーの原因は、スタックサイズが原因のようには思われません。スタックサイズの変更は、通常、最後の手段であることをご理解下さい。

参考URL:http://msdn.microsoft.com/ja-jp/library/tdkhxaks …
    • good
    • 0
この回答へのお礼

auto 宣言した配列を関数の外において大域変数に直したらメモリ不足にならずに正常計算終了しました。ありがとうございました。C/C++ではメモリ管理がスタック管理(auto変数等局所変数宣言した領域)とヒープ管理(大域変数やmalloc、free、new、 deleteで確保したメモリ)に分かれていることを再確認しました。

お礼日時:2008/11/12 16:21

古いVCは /Fスタックサイズ で調整できたと思います。


100バイトにしたければ
cl /F100
のように。

コマンドプロンプトから cl -?
で説明がでるはず。
    • good
    • 0

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