• ベストアンサー

Visual C++ 2008 オーバーフローのエラーについて

プログラムのデータ量を増やしたところ、エラーが起こりました。 減らせば流れることから、スタックオーバーフローと呼ばれるものかと思います。 スタックサイズが初期値のままなのが原因だと予想したのですが、この変更方法がどうにもわかりません。 もしよろしければ、スタックサイズの変更方法を教えてください。 また、別の対処方法をご存知でしたらそちらでも結構です。 ソフトはMicrosoft Visual stdio 2008のC++です。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

データ量を増やしたら、ってあるけど どういう方法なのかが書かれてないね。 読み込みデータ量の事? それともプログラム自体で書いてある確保領域の事? 前者なら読み方を工夫するように書き換えないとだめ 後者なら………もう少しどうやってるのか明確に判らないと書きようがないけどメモリ確保を明示的にやらないとだめかも。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

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

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

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

参考URL:
http://msdn.microsoft.com/ja-jp/library/tdkhxaks(VS.80).aspx
kakuiwa
質問者

お礼

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

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.2

古いVCは /Fスタックサイズ で調整できたと思います。 100バイトにしたければ cl /F100 のように。 コマンドプロンプトから cl -? で説明がでるはず。

関連するQ&A

  • C# 再帰よるスタックオーバーフローについて

    VB2008 C# でプログラムしていますが、 プログラムで再帰を多く行わなくてはならず、 スタックオーバーフローが出てしまいます。 スタックオーバーフローを解決するためには、アルゴリズムを変更し、 再帰の回数を減らすしか方法はないのでしょうか? もしスタックの上限を変更する方法などがありましたら教えてください。 VBは初心者なので、なるべく簡単にお願いします。

  • Microsoft Visual C++でのエラー「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」について

    タイトルに書きましたが、Microsoft Visual C++で実行(?)した際に、エラーがある時は下の欄にいろいろ出てくると思いますが、先ほど「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」というエラーがでてきました。 絶対にあってるだろう簡単なプログラムでも毎回そうなってしまします。 どういうことなのでしょうか? 初心者なのですがよろしくお願いします。

  • Visual C++ が複数インストールされている

    コントロールパネルのプログラムのアンインストール画面を見たら、複数の Visual C++ がインストールされていました。 Microsoft Visual C++ 2005 Redistributable...... Microsoft Visual C++ 2005 Redistributable...... Microsoft Visual C++ 2008 Redistributable...... Microsoft Visual C++ 2008 Redistributable...... Microsoft Visual C++ 2008 Redistributable...... Microsoft Visual C++ 2010 Redistributable...... といった具合に5つもインストールされていました。 2010を残して、他をすべてアンインストールしても大丈夫なのでしょうか? このままにしておかないと動かなくなるプログラムがでてくるのかな。

  • Microsoft Visual C++エラー

    IEを起動するとMicrosoft Visual C++ Runtime Library このようなエラーが出てIEが表示されず自動的に強制終了されてしまいます。 調べてみたところMicrosoft Visual C++ の古いバージョンをアンインストして新しいものを入れると直ると書いてあったのですが。試してみても直りませんでした。 IEのリセットもしたのですが変化はありません。 どなたか解決策に心当たりがあれば教えてくださいおねがいします><

  • .NET(C#)でのスタックオーバーフロー回避方法

    ASP.NET初心者です。初めて質問させていただきます。 ASP.NET(C#)でwin32系の外部ライブラリを使用したいのですが、そのライブラリを読み込むところで スタックオーバーフローが発生してしまいます。 同じライブラリをWindowsアプリケーション(C#)で使用したところ問題なく実行できました。 ASP.NETで同じように使用しようとするとスタックオーバーフローが発生してしまう状態です。 [デバッグ中のエラーメッセージ] xxxx.dllを読み込めません。再帰が深すぎます。スタックがオーバーフローしました。 [イベントログ] 障害が発生しているアプリケーション名: w3wp.exe、バージョン: 7.5.7600.16385、タイム スタンプ: 0x4a5bcd2b 障害が発生しているモジュール名: xxxx.dll_unloaded、バージョン: 0.0.0.0、タイム スタンプ: 0x4d92e27c 例外コード: 0xc0000005 xxxx.dllは、今回使用したいDLLです。 過去の質問等でスタックオーバーフローが発生した場合の解決策を探してはみたのですが、見つけられた方法が以下の2つでどちらもうまくいきませんでした。 (1)スタック領域を大きくする →スレッドでスタック領域を指定して実行してみました。 (2)ライブラリの中身をスタックオーバーフローが起きないように変更する → ライブラリの中身は変更できない状態です。 (1)のほうは、指定方法間違えてるかもしれません。。。 Thread newthread = new Thread(new ThreadStart(init), 0); もしくは、w3wp.exeでエラーが発生しているということはIIS関係で何かおかしなことをしてしまってるのかもとか・・・。 根本から見方が間違ってるかもしれませんが、(1)の方法の正しいやり方、もしくはそれ以外の解決策をご教授頂きますようよろしくお願いいたします。

  • Microsoft Visual C++ の下位バージョンはアンインストール可?

    OS は Windows Vista、PC は DELL Studio です。 [コントロールパネル] - [プログラムのアンインストール] - [プログラムのアンストールまたは変更] の一覧に以下の4プログラムが表示されています: Microsoft Visual C++ 2005 ATL Update kb973923 - x86 8.0.50727.4053 Microsoft Visual C++ 2005 Redistributable Microsoft Visual C++ 2008 ATL Update kb973924 - x86 9.0.30729.4148 Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022 私は「Microsoft Visual C++」をどのように使うのかわからないのですが、上位バージョンの「Microsoft Visual C++ 2008」がインストールされているので、上の2つ(「Microsoft Visual C++ 2005 ATL 云々」と「Microsoft Visual C++ 2005 Redistributable」)はアンストールしても構わないでしょうか? なるべくディスクの空き容量を大きくしたいのです。

  • Microsoft Visual C++ Runtime Library

    お願いしたいと思います。 Microsoft Visual C++ Runtime Library Runtime Error Program : C:Program Files \outlook Express\msimn.exe R 605 pure virtual function call というエラーがパソコンに表示されております。 とても困っておりますので、解決方法をおしえて頂けませんでしょうか? よろしくお願い致します。

  • Visual C++のビルドにて

    Microsoft(C) Visual C++.NET 2003 std 上記のコンパイラを使用してあるプログラムをビルド しとようと したのですが以下のエラーがでてビルドできませんでした。 プログラム名:pro 名前:仮名 コンピュタ名:home 「pro fatal error LNK1201: プログラム データベース 'c:\Documents and Settings\田中 太郎.home\My Documents\Visual Studio Projects\bpro\Debug\pro.pdb' に書き込めません。ディスク容量不足、パスが無効、また十分な特権がない可能性があります。」 これの解決方法を知っている方、おしえてくださいましm(_)m

  • Microsoft Visual C++ 6.0 でC言語のみで書かれたプログラムコードをビルドしたい

    Microsoft Visual C++ 6.0 でC言語のみで書かれたプログラムコードをビルドしたいときはどうしたらいいのでしょうか? 何かスイッチがありますか? C++の文法で書かれていたらエラーになって欲しいのです。

  • ビジュアルC++ランタイムライブラリ エラー 

    あるプログラムを実行した場合エラーウインドウが開き そこには以下のような表記がされています。 勿論プログラムはそこから先へは動きません。 いったいこれは何のエラーで、どういう意味を示していて、 どこが悪くて、どうすればエラーを出なくできるのか、 よくわかりません。 教えて戴けると嬉しいのは、解決方法です。 宜しく御願いします。 ・タイトルバーの表示 microsoft visual C++ runtime liblarary ・ウインドウ内の表示 × runtime error! purogram:(ここには実行プログラムのエクスプローラ内の位置が表示されています) abnormal program termination ・存在するボタン OK

専門家に質問してみよう