• ベストアンサー

VC6でコンパイルでスタックの領域を増やすには?

初めて、VisualC++6.0で再帰を行うプログラムを書いているのですが、 スタックオーバースローなのか、突然プログラムが終了し、タスクバーにあった実行中のアプリが消えてなくなります。 原因がまだわからないのですが、スタックを増やす方法が知りたいのですが、どうすればよいのでしょうか? また、このように突然アプリが終了するので、どこが原因かわからないのですが、実行中に警告表示するような機能はありますか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

VC6 を現在使ってないので、あやふやですが、 プロジェクトのプロパティからスタックチェックやスタックサイズの設定ができたと思います。 コマンドラインから cl を使っている場合には、 cl /? でコマンドラインオプションが表示されます。 そのなかに、 スタックフレームのチェックオプション(コード生成) スタックサイズ設定オプション(リンク) があると思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

コンパイラオプションの/F、リンカオプションの/STACKですね。 Defaultでは1MBに設定されています。 EXE ファイルに対して EDITBIN を実行して/STACKで指定することも可能です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • 最大スタックサイズを大きくすることの影響は?

    再帰呼び出しを行うプログラムでスタックオーバーフローが発生するようになりました。 そこで最大スタックサイズを変更しようと考えていますが 最大スタックサイズを大きくすることで何か影響があることはあるのでしょうか? 他アプリ等に影響が出ないかを懸念しています。 ※最大スタックサイズは最大で16Mらしく、現在は1Mです。  特に影響がないのであれば最初から16Mにしておけば良いような気もして疑問に思っています。

  • VC++6.0 Stack Overflow !!

    私はVC++6.0で画像処理のプログラムを作っています。 再帰構造を用いたある関数を呼ぶと、対象の画像によって、スタックオーバーフローでプログラムが止まってしまいます。 これを避ける方法や、スタックのサイズの変更方法がありましたら教えてください。 なお、現在、VC++のメニューの「プロジェクト」→「設定」→「リンク」タブ→「アウトプット」カテゴリからスタックアロケーションの予約のところを適当な大きな数を入力しているのですが、効果はありません。

  • スタック領域エラーについて

    いつも参考にさせていただいています。 ご回答よろしくおねがいします。 新規のフォームにチェックボックスを3つ追加しました。 コントロール配列です。 ------frame1-------- | checkbox1(0) | | checkbox1(1) | | checkbox1(2) | -------------------- このときに、 --------------------------------------------- Private Sub Check1_Click(Index As Integer) Check1(0).Value = 0 Check1(1).Value = 0 Check1(2).Value = 0 Check1(Index).Value = 1 End Sub --------------------------------------------- 以上のようにプログラムを実行すると、 スタック領域エラー(エラー28)が出力されます。 この回避方法について、また原因がおわかりいただけたら ご教授おねがいできないでしょうか? OS:WinXP SP3 環境:VB6

  • gccでスタックオーバーフローのチェック

    OS:WindowsXP コンパイラ: MinGW gcc 3.3.3 gccで、スタックオーバーフローの検出を行いたいと思っています。 gcc -v --helpで見ると > -fstack-check Insert stack checking code into the program と書かれているので、そのように指定して、無限に自分を呼び続ける再帰のプログラムを走らせてみました。 gcc -fstack-check testS2.c  ですが、オプションを指定しない時と同じように突然何の前触れもなく終了してしまいます。  このオプションはスタックを使い切るかどうかをチェックするオプションではないのでしょうか。  よろしくお願いいたします。

  • perlの命令実行順がおかしいんです

    お世話になっております。 調べ方が甘いのか、調べ切れなかったのでお願いいたします。 Perl5.8.7でプログラムしているのですが、明らかに命令実行順が おかしくなります。(デバッグ文で確認) 再帰したりしているので、スタックの上書きが起きているのかとも 思いましたが、確認する方法を知りません。 またPerlではガベージコレクタで、ほとんどスタックの上書きなど ないというサイトも見ました。 どんな原因が考えられるのでしょうか? 情報不足の場合は何が不足しているのか仰ってください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • OCXからのコールバックを繰り返すとスタック領域が不足する

    こんにちは。 いつもお世話になっております。 OCXからのコールバックが繰り返された場合に「実行時エラー28 スタック領域が不足しています。」が発生して困っています。 以下のようにOCXからのコールバックでプロシージャを再帰的に呼び出しています。 <Command1_Clickイベント> ------------------------------------------------------------------------------------- Private Sub Command1_Click() 'OnTestイベントを発生させる Test.Test End Sub ------------------------------------------------------------------------------------- <OnTestイベント> ------------------------------------------------------------------------------------- Private Sub Test_OnTest(ByVal sStatus As Long, ByVal FileName As String) Select Case sStatus Case 0 'ステータスが0になったら終了 Exit Sub Case Else '再帰的にOnTestイベントを発生させる Test.Test End Select End Sub ------------------------------------------------------------------------------------- すると、294回目でスタック領域不足が発生します。 MSDNによると「イベント連鎖」と呼ばれるものであるようですが、途中までうまくいくので何か他に原因がないかと思っています。 http://msdn2.microsoft.com/ja-JP/library/0ctsw64a.aspx 回避策などありましたらご教示下さい。 ちなみにOCXの処理としては、フォルダ内の該当ファイル名を1つずつ返すというものです。 <環境> Windows 2000, VB6.0

  • openglをVC++2010で利用したいです。

    VisualC++2010でopenglのプログラムを利用しているものです。 openglのインストールを完了し、プログラムにエラーもなくコンパイル、実行したのですが、図形が描画されるところが真っ黒のまま何も表示されません。 視点の問題かと思い、gluPerspectiveをいじったりしても何も表示されず、 プログラムのミスかと思いネット上のプログラムをコピペしても何も表示されません。 原因をいろいろネットで調べたのですが、なかなか解決に至りません。 使ってるPCはdynabookR542/16FS PR54216FNTS osはWindows7の64bitです。 よろしくお願いします。

  • 実行中のプログラムがタスクバーに表示されない。

    タスクバーに実行中のプログラムが表示されません。 ヘルプには、「Instant Accessを終了して・・・」と書いてあるのですが、Instant Accessというプログラムが実行されてないんです。(私が見た限り。)ほかに原因があるのでしょうか? 教えてください。

  • VC++ のコンパイルエラーについて

    現在、解説書に記載されているコードをVC++でコンパイルできるか試しながらC++を独習中です。エラーの原因と対応が分からず困っております。どなかたご教示よろしくお願いします。 日付を表示するプログラムで米国表示か英国表示にするか列挙型の宣言と静的メンバーをヘッダーファイルに記載し、フラッグの定義と初期化をするプログラムをコンパイルしました。 ---クラス定義(ファイル名:date.h)--- #include <iostream.h> class date{ ----------------------- enum Lang {USA, UK}; static Lang format; public: ----------------------- }; ---メンバー関数定義(ファイル名:date.cpp)--- #include <string.h> #include <ctype.h> #include <stdlib.h> #include "date.h" ----------------------- Lang date::format = USA; ----------------------- ---------------------------------------- このファイルをコンパイルした結果、下記のエラーメッセージが表示されました。 エラー発生箇所は上記「Lang date::format = USA;」でした --------------------構成: date - Win32 Debug-------------------- コンパイル中... date.cpp date.cpp(17) : error C2501: 'Lang' : 識別名を宣言するのに、型が指定されていません。 date.cpp(17) : error C2239: 無効なトークン 'tag::id' が 'Lang' の宣言の後にあらわれました。 date.cpp(17) : error C2321: 構文エラー : 予期しない 'date::format' です。 cl.exe の実行エラー date.obj - エラー 3、警告 0 ----------------------------------------------------------------------------- エラーの原因と解決方法が分かりません。 よろしくお願いします。