当前位置: 首页 > 知识库问答 >
问题:

main()之前的堆栈溢出异常

楚勇
2023-03-14

这是关于stackoverflow的第一个问题,所以我将尽量具体地说明。我在论坛上搜索任何相关的话题,但没有运气。总之是这样的:

->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(常量无符号字符*s1=0x00FE8C10,常量无符号字符*s2=0x00FE8C10)行84+0xF字节
ihr.exe!_mbscmp(常量无符号字符*s1=0x00FE8C10,常量无符号字符*s2=0x00FE8C10)行84+0xF字节
ihr.exe!_mbscmp(常量无符号字符*s1=0x00FE8C10,常量字符*s2=0x00FE8C10)行1646+0x2B字节
ihr.exe!_mbscmp_L(常量无符号字符*s1=0x00FE8C10带符号字符*S1=0x00FE8C10,常量无符号字符*S2=0x00FE8C10,localeinfo_struct*plocinfo=0x0000000000)行58+0xD字节
ihr.exe!_mbscmp(常量无符号字符*S1=0x00FE8C10,常量无符号字符*S2=0x00FE8C10)行84+0xF字节
ihr.exe!strcmp(常量字符*_S1=0x00FE8C10,常量字符*_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::_locinfo=0x00EA591C)行78+0xD字节
ihr.exe!std::_locinfo::_locinfo=0x00EA591c type::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>*_strbuf=0x00ff7908,bool_isstd=false)行53
ihr.exe!std::basic_streambuf>*_strbuf=0x00ff7908`'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 l.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在整个程序中使用,没有任何问题。谢谢

共有1个答案

商振
2023-03-14

很可能您有全局/静态变量,并且它们正在尝试在您运行main之前进行初始化。可能实际初始化的顺序并不是您所期望的,就好像您在不同的文件中有它们一样,没有办法告诉它们应该按照哪个顺序创建。

要么删除这些变量,要么将它们排列到同一个文件中。

 类似资料:
  • 我有一个执行快速排序的应用程序。在我开始给它一些更大的数字(我第一次得到它是10000000)之前,它工作得很好。我知道是由递归引起的,但我不明白为什么我的应用程序会因此而崩溃。如有任何建议,将不胜感激。这是我的密码:

  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。

  • 问题内容: 这有效:http : //play.golang.org/p/-Kv3xAguDR。 这导致堆栈溢出:http : //play.golang.org/p/1-AsHFj51O。 我不明白为什么。在这种情况下,使用接口的正确方法是什么? 问题答案: 这个 将呼叫您的,依次呼叫,等等。如果您需要解组JSON然后对其进行处理,那么一种巧妙的技术是声明一个本地类型,将数据解组到其中,然后转换

  • 我写了以下内容: 解决4clojure.com的问题#118:http://www.4clojure.com/problem/118 当我询问时,不出所料,我会得到一个clojure.lang.lazyseq,但我不知道这与简单地删除lazy-seq“包装”有什么区别。 当然,现在如果删除lazy-seq,我会得到一个stackoverflow,为什么要执行这个: 否则(也就是说:如果我让lazy

  • events.js:377 RangeError [Error]: Maximum call stack size exceeded Emitted 'error' event on process instance at: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! sea-wind-power@1.0.0 dev: vite --hos

  • 我有一个类 Delete 我想使用 Gson 库将其转换为 json,但是当我转换它时,它会抛出 这是我的类 这里是枚举类DeleteStatus.scala 删除原因.scala 以下是我如何在Json转换 但它抛出以下异常 请帮助其中的错误