これは、ここでのスタックオーバーフローに関する最初の質問なので、具体的にしようと思います。フォーラムで関連トピックを検索しましたが、運がありませんでした。とにかくここに行きます:
Visual Studio 2005 を使用しています。スタック オーバーフロー例外が発生しました。IHR.exe の 0x775715de で未処理の例外: 0xC00000FD: スタック オーバーフロー。、私のプロジェクトをデバッグしようとしたとき。コール スタックは、main() 関数に入る前に ntdll.dll で停止するため、役に立ちません。
最初はコンパイル設定の問題ではないかと疑っていましたが、自分のコンピューターでコンパイルした実行可能ファイルを 2 番目のコンピューターに送信したところ、問題なく実行できましたが、自分のマシンでは実行されませんでした。
同じことが逆に起こります.2番目のコンピューターで実行可能ファイルをコンパイルしました.その上で正常に実行できました. しかし、2 台目のコンピューターでコンパイルされた実行可能ファイルを自分のコンピューターで実行しようとすると、実行できませんでした。表示されたのは、空白のコマンド プロンプトと、プログラムが応答していないことを示す Windows メッセージだけでした。
Windows 7 Professional SP1、64 ビットを使用しています。もう一方のコンピューターの OS バージョンは同じです。会社の方針により、ここにソース コードを投稿することはできませんが、ソース コードとは関係ないと思います。実行環境に問題があるのではないかと思います。どんな助けにも感謝します。ありがとう。
コール スタックにあるのは次のとおりです。
->ntdll.dll!775715de()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!775715de()
ntdll.dll!7756014e()
@WhozCraig の提案のおかげで、コール スタックでより意味のあるメッセージを得ることができました。それでも困惑。
IHR.exe!_mbscmp(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10) 行 84 + 0xf バイト
IHR.exe!_mbscmp(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10) 行84 + 0xf バイト
IHR.exe!strcmp(const char * _s1=0x00fe8c10, const char * _s2=0x00fe8c10) 1646 行 + 0x2b バイト
IHR.exe!_mbscmp_l(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10 , localeinfo_struct * plocinfo=0x00000000) 行 58 + 0xd バイト
IHR.exe!_mbscmp(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10) 行 84 + 0xf バイト
IHR.exe!strcmp(const char * _s1= 0x00fe8c10, const char * _s2=0x00fe8c10) 1646 行目 + 0x2b バイト
上記のスタックに至るまで、さらにいくつかあります
IHR.exe!_mbscmp_l(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10, localeinfo_struct * plocinfo=0x00000000) Line 58 + 0xd bytes C++
IHR.exe!_mbscmp(const unsigned char * s1=0x00fe8c10, const unsigned char * s2=0x00fe8c10) Line 84 + 0xf bytes C++
IHR.exe!strcmp(const char * _s1=0x00fe8c10, const char * _s2=0x00fe8c10) Line 1646 + 0x2b bytes
IHR.exe!_setlocale_get_all(threadlocaleinfostruct * ploci=0x002f13a0) Line 1147 + 0x24 bytes
IHR.exe!_setlocale_nolock(threadlocaleinfostruct * ploci=0x002f13a0, int _category=0, const char * _locale=0x00000000) Line 966 + 0x9 bytes C
IHR.exe!setlocale(int _category=0, const char * _locale=0x00000000) 826 行 + 0x1b バイト
IHR.exe!std::_Locinfo::_Locinfo_ctor(std::_Locinfo * pLocinfo=0x0018f8f8, const char * locname=0x00ea591c ) 192 行目 + 0x9 バイト
IHR.exe!std::_Locinfo::_Locinfo(const char * _Pch=0x00ea591c) 78 行目 + 0xd バイト
IHR.exe!std::ctype::ctype(const short * _Table=0x00000000, bool _Deletetable=false, unsigned int _Refs=0) 1740 行 + 0x10 バイト
IHR.exe!std::ctype::_Getcat(const std::locale::facet * * _Ppf=0x0018fbd8) 1760 行 + 0x4d バイト IHR.exe! std::use_facet >(const std::locale & _Loc={...}) 478 行目 + 0x9 バイト IHR.exe!std::basic_ios >::widen(char _Byte=' ') 124 行目 + 0x34 バイト
IHR.exe!std::basic_ios >::init(std::basic_streambuf > * _Strbuf=0x00ff7908, bool _Isstd=false) 135 行目 + 0xa バイト
IHR.exe!std::basic_ostream >::basic_ostream >(std:: basic_streambuf > * _Strbuf=0x00ff7908, bool _Isstd=false) 53
行目 IHR.exe!std::`'cout''() の動的初期化子 13 行目 + 0x16 バイト IHR.exe!_initterm(void (void)* * pfbegin= 0x00e8d10c, void (void)* * pfend=0x00e9dca0) 行 855 IHR.exe!_cinit(int initFloatingPrecision=1) 行 293 + 0xf バイト
IHR.exe! tmainCRTStartup() 行 310 + 0x7 バイト
IHR.exe!mainCRTStartup() 行 196
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 バイト
ntdll.dll! RtlUserThreadStart@8() + 0x27 バイト
ntdll.dll!_RtlUserThreadStart@8() + 0x1b バイト
スタック オーバーフロー例外が発生するまで、strcmp、mbscmp、mbscmp_l を繰り返し呼び出し続けます。
更新 (2013 年 4 月 11 日): 問題の原因となっている行を見つけましたが、それが原因である理由についてはまだまったくわかりません。strcmpの使い方です。
struct Foo
{
char text[4];
bool operator < (const Foo &rhs) const
{
return strcmp(text, rhs.text) < 0;
}
}
この strcmp がコメントアウトされたとき。プログラムはクラッシュしませんでした。そのような問題に対処するためのアイデアや経験はありますか? 同じプログラムは他のマシンでも問題なく動作しますが、この行が原因でクラッシュするのは私のマシンだけです。他の strcmp はプログラム全体で問題なく使用されます。ありがとう