ソフトウェア例外「0xC00000FD」は、Windowsアプリケーション実行時にスタックオーバーフローエラーが発生したことを意味しています。
※OSエラーコードは、Microsoft Visual C++の include 配下にある winerror.h や winnt.h 等を調べることにより、その意味を知ることができます。
また、その他のヘッダなどに書かれている可能性もありますので、Microsoft Visual C++ の include 配下 を 16進値/10進値 などで検索することが有効です。
原因:
アプリケーション実行時に、大きなローカルデータを使用している、関数呼び出しのネストが深いなどから、Windowsアプリケーションがスタック不足となっています。
対処法:
アプリケーション側での消費スタックサイズの縮小措置(データの削減・関数ネストの削減など)ができないかを検討してください。
アプリケーションで対応できない場合、スタックサイズを大きくすることで、Windowsアプリケーションを正常に動作させることが可能となります。
以下の方法で、スタックサイズを変更できます。
Windowsアプリケーションは、デフォルトで1MBのスタック領域を持っていますので、1MBより大きい値に変更しください。
どのくらい大きくすればいいかは、Windowsアプリケーションの構成によります。
①既に作成済みのEXEのスタックサイズを変更する。
VisualStudioのコマンド「editbin」でスタックサイズを変更してください。
形式 : editbin /stack:<スタックサイズ> EXE名
②アプリケーション生成時にスタックサイズを指定する。
リンクオプションに「/STACK」オプションを指定してください。
指定しておくと、EXEを生成する際にスタックサイズが変更されますので、①のようにEXEを生成するたびに、スタックサイズを変更する必要がなくなります。
仕様ファイルのプログラム単位生成オプションの拡張オプションシートに以下のように指定します。
/stack:<スタックサイズ>
すべてのEXEでスタックサイズを変更する場合は、環境設定の拡張オプション画面のリンクオプションに指定します。
補足)
UNIXアプリケーションでも同様なことが発生します。
※HP-UXの場合、以下のようなエラーが発生します。
---
Pid XXXXX received a SIGSEGV for stack growth failure.
Possible causes: insufficient memory or swap space,
or stack size exceeded maxssiz.
セグメンテーション障害 (コアファイルが作られました。)
---
UNIXでは、OSの設定でスタックサイズが決まっていますので、OSのコマンド「limit」でスタックサイズを変更してください。
形式 : limit stacksize 変更後スタックサイズ
カーネルで許可されている限界値までスタック領域を大きくするには、以下のコマンドを使用します。
limit stacksize unlimit
【確認済みのバージョン】すべてのバージョン
【確認済みの対象OS】すべてのOS
【カテゴリー】トラブルシューティング