我正在Visual Studio中使用Win32 c ++应用程序.
在其中一个源文件中,我有如下的全局对象.
TestClass tObj;
int main() //Execution starts here
{
}
Run Code Online (Sandbox Code Playgroud)
TestClass在下面的其他DLL中定义.
struct Source
{
};
class TestClass
{
list<Source> sourceList;
public:
TestClass() {}
~TestClass() {}
};
Run Code Online (Sandbox Code Playgroud)
当我的应用程序运行时,如果我尝试通过关闭控制台窗口显式关闭应用程序,它将在TestClass析构函数中崩溃.Callstack显示CrtIsValidHeapPointer失败.
请帮我解决这个问题.
您的问题是.exe和.dll之间不同的编译器/链接器设置有效地导致.dll和.exe使用标准库的不同实现:
要解决此问题,请转到Project > Properties > Configuration Properties > C/C++ > Code Generation并将运行时库选项更改为Multi-threaded Debug DLL (/MDd).您必须为.exe项目和.dll项目执行此操作.
从Visual Studio 2010开始,将使用#pragma detect_mismatch在链接时检测到某些类型的错误.
*对于具有标准库实现任何影响的所有预处理程序标志