• ベストアンサー

エラーについて

プログラムをコンパイルはできるのですが、実行するとエラーが出てしまいます。 run-time error R6000 -stack overflow と出るのですが、これはどういう意味なのでしょうか? どこを直せばいいのかわからず困っています。よろしくお願いします。

  • twai
  • お礼率100% (4/4)

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

 スタックとはメモリの一部で、主にローカル変数の確保や関数呼び出し元のアドレス保存、関数へのパラメータ受け渡し領域として使われます。  stack overflowとは、スタックとして割り当てられているメモリ領域を使い切ってしまったというOSからのエラーメッセージです。  考え得る原因はpunchan_jpさんのおっしゃる通りです。その中でも一番ありがちなのが、巨大な配列の関数内確保ですね。  簡単な解決策はグローバル変数にすることです。グローバル変数はスタックとは別のメモリ領域に確保されます。関数内でもstaticを付けて宣言すれば同様になります。  また、mallocによってメモリを動的確保するのも手です。この場合初期化はできませんが。  再帰関数の終了条件設定ミスもよくあります。これはアドバイスできる範疇ではないので、もし思い当たるならば、補足辺りにその関数を載せてもらわないと回答はムリですね。

twai
質問者

お礼

ありがとうございました!おかげで解決し、実行できるようになりました!!

その他の回答 (3)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

使っているのは Visual C (もしくは MSC) ですよね。 コマンドラインでコンパイルをしているのであれば、 /F オプションで 指定します。 d:\> cl /F20000000 ... プロジェクトを作っているのであれば、プロジェクトの設定で、「リンク」 というタブがあるはずで、そこでスタックのサイズを指定できます。 多分、「スタックアロケーション」の「リザーブ」となっているはず。 指定は、バイト単位で、デフォルトでは 1Mbyte なので、それよりも 大きな数字を設定することになります。 もし、スタックが足りなくなっている原因が関数の呼出しが深すぎる ことが原因であれば、スタックサイズの指定をしても問題は解決しません。 プログラムの見直しをしましょう。 ただし、普通の呼出しかたでは、めったにこうなることはありません。 プログラムの中で、関数の再帰呼出しをしていなければ、スタックサイズの 指定でいけるはずです。

twai
質問者

お礼

ありがとうございました!おかげで解決し、実行できるようになりました!!

回答No.2

stack overflowということは、関数の呼び出しが深すぎるか、 関数にローカルな変数が多すぎるかです。 関数から自分自身を呼び出す再帰呼出しをしていて、 その終了条件が誤ってませんか? 巨大な配列変数を関数内で宣言していませんか? もし、それらに問題ない場合、stack のサイズが小さすぎるのかもしれません。 UNIXであればシェル内で stack のサイズを増やすことができると思います。 とはいえ、デフォルトの stack サイズでも overflow しないように書くのが 本筋でしょう。

twai
質問者

お礼

ありがとうございました!おかげで解決し、実行できるようになりました!!

  • j_euro
  • ベストアンサー率25% (29/115)
回答No.1

コンパイルオプションのスタックサイズを大きく設定するか、スタックチェックをしないように設定して下さい。 (あれ、リンカオプションだったかな?) OSとコンパイラ(出来ればバージョンも)をはっきりさせないと正解は来ないかも、 メッセージは、MS-DOSのMSCににているけど。

twai
質問者

お礼

ありがとうございました!おかげで解決し、実行できるようになりました!!

関連するQ&A

  • fortranについて

    fortranでプログラムをコンパイルし、実行したところRun-time Errorと出てきて、00401000 main [+0052]と書いてありました。何が原因なんでしょうか?

  • ftn77のコンパイルエラー

    ftn77でfortranのプログラムをコンパイルしたところ、 文字情報のみでテストしたらコンパイルに成功したのですが、 数値計算の入ったものをコンパイルしたら、 実行時に以下のようなエラーが起こりました。 ーーーーーーーーーーーーーーーーーーーーーーーー RUN-TIME ERROR 00401000 main [+00c5] [recur= 1] メッセージ WARNING the following symbols are missing: IMAG C:\fortran\(ファイル名).obj (C:\FORTRAN\(ファイル名).FOR) ーーーーーーーーーーーーーーーーーーーーーーーーー 元々別のパソコンでコンパイルが成功したものを、 まったく書き換えずにftn77でコンパイルしてみたのにもかかわず、 UNTIME EROORと表示されました。 原因が何か分からないので、どなたか教えてください。 ちなみに10行程度の単純なプログラムなら、数値計算をしてもエラーは怒りませんでした。

  • プログラム実行時にわからないエラーメッセージが出ました

    書いたプログラムをcygwinでコンパイルし実行してみたのですが 数値を入力していくと次のようなエラーメッセージが出ました。 エラーの意味と、可能なら解決法をおしえていただきたいです。 よろしくお願いします。 12 [main] so 3092 _cygtls::handle_exceptions: Error while dumping state ( probably corrupted stack) Segmentation fault (core dumped)

  • IEのエラーについて

    インターネットで、あるサイトで、「次へ」のボタンをクリックしたとき「Stack overflow at line:258」のエラーメッセジが出ました。 このエラーの意味は何でしょうか? また、どうしたら出ないようになりますか? IEのバージョンは6.0で、OSはWIN98です。

  • エラー内容

    C++で書いたプログラムを実行したところ、以下のようなエラーが出たのですが、 これはどういった意味のエラーなのでしょうか? また、解決するにはどのようにしたらよいでしょうか? 11 [sig] apriori 436 open_stackdumpfile: Dumping stack trace to apriori.exe.stackdump

  • wineのエラー

    wineで http://www2.kobe-u.ac.jp/~kuroki/OpenSoft/SR100x100/index.html のアプリケーションを実行しようとした所、 0024:err:virtual:virtual_setup_exception stack overflow 1616 bytes addr 0x17003173b stack 0x1012109b0 (0x101210000-0x101211000-0x10130fd20) というエラーが出てしまいました。 どうすればいいのでしょうか?

  • エラー?メッセージ

    4 [main] j00 2164 _cygtls::handle_exceptions: Exception: STATUS_STACK_OVERFLOW 1122 [main] j00 2164 open_stackdumpfile: Dumping stack trace to j00.exe.stackdump 実行すると↑のエラー?メッセージがでます。 どうすれば、↑のメッセージを消すことができるのでしょうか?教えてくださいm( _ _ )m 一応、「j00」ってのはソースファイル名です。

  • エラーメッセージ(overflow error)

    コンパイル後、下記のエラーメッセージとなってしまうのですが、 どなたか対処方法を教えていただけませんでしょうか。 pow:overflow error log10:overflow error ちなみにborlandのフリーのコンパイラを利用しております。 よろしくお願いいたします。

  • Run-Time Check Failure?

    Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted. と表記されました。 どういったエラーのことなんでしょうか?

  • 「シンボルを見つけられません」というエラーの発生原因

    現在大学でJavaを勉強しており、家のパソコンで開発環境を整えようとしていますが、不具合が発生したので質問させてください。 まず、kadaiというフォルダに、「Test.java」「Stack.java」というファイルがあり、Test.javaの中にmain関数が、Stack.javaにStack関数がそれぞれ入っています。 コマンドプロンプトを用いてTest.javaをコンパイルしようとしたところ、「シンボルを見つけられません シンボル:Stack」というエラーが発生してしまいました。 大学では、main関数のあるファイルをコンパイルすれば、Stack.javaも自動的にコンパイルされると言われ、実際それで実行できました。 恐らく家のパソコンの設定に不備があるのでしょうが、どうすれば解消できるのでしょうか? ところどころ日本語がおかしくてすみません。

    • ベストアンサー
    • Java