Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在std::locale析构函数中退出时崩溃 我正在用Visual Studio 2010在C++中开发Win32应用程序。在调试模式下运行时,应用程序运行良好,退出后会正确关闭。然而,在版本中,程序运行正常,但在应用程序关闭时,存在未处理的异常:application.exe中0x009C19F5处的未处理异常:0xC0000005:访问冲突读取位置0x00297628_C++_C_Winapi - Fatal编程技术网

在std::locale析构函数中退出时崩溃 我正在用Visual Studio 2010在C++中开发Win32应用程序。在调试模式下运行时,应用程序运行良好,退出后会正确关闭。然而,在版本中,程序运行正常,但在应用程序关闭时,存在未处理的异常:application.exe中0x009C19F5处的未处理异常:0xC0000005:访问冲突读取位置0x00297628

在std::locale析构函数中退出时崩溃 我正在用Visual Studio 2010在C++中开发Win32应用程序。在调试模式下运行时,应用程序运行良好,退出后会正确关闭。然而,在版本中,程序运行正常,但在应用程序关闭时,存在未处理的异常:application.exe中0x009C19F5处的未处理异常:0xC0000005:访问冲突读取位置0x00297628,c++,c,winapi,C++,C,Winapi,然后,调试器在std::local的析构函数中的xlocale内部中断: ~locale() _THROW0() { // destroy the object if (_Ptr != 0) _DELETE_CRT(_Ptr->_Decref()); // breaks here with unhandled exception } 我相信,上面的代码是在我的主函数返回并在某个地方调用exit 0之后运行的。以下是我在崩溃时的调用堆栈: Application.exe!std:

然后,调试器在std::local的析构函数中的xlocale内部中断:

~locale() _THROW0()
{  // destroy the object
if (_Ptr != 0)
    _DELETE_CRT(_Ptr->_Decref()); // breaks here with unhandled exception
}
我相信,上面的代码是在我的主函数返回并在某个地方调用exit 0之后运行的。以下是我在崩溃时的调用堆栈:

Application.exe!std::locale::~locale() Line 411 C++
Application.exe!doexit(int code, int quick, int retcaller) Line 567 C
Application.exe!exit(int code) Line 393 C
Application.exe!__tmainCRTStartup() Line 284    C
kernel32.dll!@BaseThreadInitThunk@12()  Unknown
ntdll.dll!___RtlUserThreadStart@8() Unknown
ntdll.dll!__RtlUserThreadStart@8()  Unknown
我正在使用微软的应用验证程序,我正在运行_CrtCheckMemory;我经常检查堆损坏,在调试或发布模式下都没有发现任何损坏。在我的任何一个源代码中,我也没有弄乱std::locale

我最近将解决方案的设置切换为默认使用unicode,而不是256个单字节大小的字符。不过,现在在unicode和多字节设置之间来回切换似乎不会影响发布中退出时的崩溃


有人知道发生了什么吗?

我找到了解决办法。有一些全局变量调用new,我有new重载。当第一次调用new时,将构造一个自定义内存管理器。这很好,但在程序关闭时,一些对象会在内存管理器完成后销毁。破坏顺序是导致问题的原因。

UB可能在某个地方。嗯,我很难找到一种方法来追踪未定义的行为可能来自何处。您是否有使用stdio或iostreams之类的全局变量或静态?是的,我有一个自定义反射系统,它使用全局变量进行注册。其中一些执行文件序列化,并将对ostream或istream的引用作为参数。请检查程序中的所有指针跳转,确保只有在最后一个用户离开后才正确处理所有内容。我不知道valgrind之类的东西是否会跟踪所有的分配,并为您提供一个Windows上的不一致性摘要。