-PR-
解決
済み

エラーについて

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

お礼率 100% (4/4)

プログラムをコンパイルはできるのですが、実行するとエラーが出てしまいます。
run-time error R6000
-stack overflow
と出るのですが、これはどういう意味なのでしょうか?
どこを直せばいいのかわからず困っています。よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル12

ベストアンサー率 75% (398/526)

 スタックとはメモリの一部で、主にローカル変数の確保や関数呼び出し元のアドレス保存、関数へのパラメータ受け渡し領域として使われます。
 stack overflowとは、スタックとして割り当てられているメモリ領域を使い切ってしまったというOSからのエラーメッセージです。

 考え得る原因はpunchan_jpさんのおっしゃる通りです。その中でも一番ありがちなのが、巨大な配列の関数内確保ですね。
 簡単な解決策はグローバル変数にすることです。グローバル変数はスタックとは別のメモリ領域に確保されます。関数内でもstaticを付けて宣言すれば同様になります。
 また、mallocによってメモリを動的確保するのも手です。この場合初期化はできませんが。

 再帰関数の終了条件設定ミスもよくあります。これはアドバイスできる範疇ではないので、もし思い当たるならば、補足辺りにその関数を載せてもらわないと回答はムリですね。
お礼コメント
twai

お礼率 100% (4/4)

ありがとうございました!おかげで解決し、実行できるようになりました!!
投稿日時 - 2001-06-07 20:01:18
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 25% (29/115)

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

(あれ、リンカオプションだったかな?)

OSとコンパイラ(出来ればバージョンも)をはっきりさせないと正解は来ないかも、
メッセージは、MS-DOSのMSCににているけど。
お礼コメント
twai

お礼率 100% (4/4)

ありがとうございました!おかげで解決し、実行できるようになりました!!
投稿日時 - 2001-06-07 20:00:45


  • 回答No.2
レベル11

ベストアンサー率 55% (155/280)

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

関数から自分自身を呼び出す再帰呼出しをしていて、
その終了条件が誤ってませんか?
巨大な配列変数を関数内で宣言していませんか?

もし、それらに問題ない場合、stack のサイズが小さすぎるのかもしれません。
UNIXであればシェル内で stack のサイズを増やすことができると思います。
とはいえ、デフォルトの stack サイズでも overflow しないように書くのが
本筋でしょう。
お礼コメント
twai

お礼率 100% (4/4)

ありがとうございました!おかげで解決し、実行できるようになりました!!
投稿日時 - 2001-06-07 20:00:16
  • 回答No.4
レベル14

ベストアンサー率 50% (1122/2211)

使っているのは Visual C (もしくは MSC) ですよね。 コマンドラインでコンパイルをしているのであれば、 /F オプションで 指定します。 d:\> cl /F20000000 ... プロジェクトを作っているのであれば、プロジェクトの設定で、「リンク」 というタブがあるはずで、そこでスタックのサイズを指定できます。 多分、「スタックアロケーション」の「リザーブ」 ...続きを読む
使っているのは Visual C (もしくは MSC) ですよね。

コマンドラインでコンパイルをしているのであれば、 /F オプションで
指定します。

d:\> cl /F20000000 ...

プロジェクトを作っているのであれば、プロジェクトの設定で、「リンク」
というタブがあるはずで、そこでスタックのサイズを指定できます。
多分、「スタックアロケーション」の「リザーブ」となっているはず。

指定は、バイト単位で、デフォルトでは 1Mbyte なので、それよりも
大きな数字を設定することになります。


もし、スタックが足りなくなっている原因が関数の呼出しが深すぎる
ことが原因であれば、スタックサイズの指定をしても問題は解決しません。
プログラムの見直しをしましょう。

ただし、普通の呼出しかたでは、めったにこうなることはありません。
プログラムの中で、関数の再帰呼出しをしていなければ、スタックサイズの
指定でいけるはずです。
お礼コメント
twai

お礼率 100% (4/4)

ありがとうございました!おかげで解決し、実行できるようになりました!!
投稿日時 - 2001-06-07 20:01:51
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


-PR-

ピックアップ

-PR-
ページ先頭へ