プロが教えるわが家の防犯対策術!

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」ってのはソースファイル名です。

A 回答 (2件)

「STATUS_STACK_OVERFLOW」これが答えですね。

スタックオーバーフローということです。

スタック領域はご存じですよね。

関数に引数を持たせたり、内部変数を持ったりしたときに消費されてゆくメモリ領域です。
スタック領域のサイズは、環境変数やコンパイルスイッチなどで変更できますが、当然有限な領域で、一般に狭い(KB単位)です。

なので、例えばですが、10KBの大きさを持つスタック領域に対して、
ある関数内で、
void aaa() {
char a[5*1024];
...
}
などとやってしまうと、いきなりスタック領域を5KB、即ち半分使ってしまうことになります。

昔はメモリが貧弱だったので、スタック領域(の狭さ)を意識してプログラミングすることが多かったのですが、
最近のメモリの増大に伴い、スタック領域も増え、それを意識してプログラミングすることはあまりなくなってきた傾向があります。

たまたまあなたのプログラムが、スタック領域を使い切るほどのことをしてしまったのでしょう。

なので、解決策としては、マニュアル等を読んで、環境変数やコンパイルスイッチなどでスタック領域を増やすか、
ご自分のプログラムを見直して、スタックの無駄遣いが無いかを点検することです。

一般に、なすべきは後者です。
失礼ながらきちんと設計していれば、スタックを使い切るということは、そうそうないことなので。
    • good
    • 0

その実行ファイルに対応するソースコードを見せていただけますか?

    • good
    • 0

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