C++ C+后崩溃+;调试DLL中的内存分配

C++ C+后崩溃+;调试DLL中的内存分配,c++,memory,dll,allocation,visual-studio-debugging,C++,Memory,Dll,Allocation,Visual Studio Debugging,我有一个驻留在dll中的类和一个使用该dll的exe。Exe只是在dll中创建类并调用其方法。在发布模式下编译时,一切正常。但是,如果我在调试模式下使用MDd标志编译所有内容(包括我的类使用的OpenCV库),那么我会得到: Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 所有涉及的二进制文件都使用完全相同的运行时DLL版本,所有内容都在VS2008的同一台计算机上编译。据我所知(根据我的调试),问题如下: 我

我有一个驻留在dll中的类和一个使用该dll的exe。Exe只是在dll中创建类并调用其方法。在发布模式下编译时,一切正常。但是,如果我在调试模式下使用MDd标志编译所有内容(包括我的类使用的OpenCV库),那么我会得到:

Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
所有涉及的二进制文件都使用完全相同的运行时DLL版本,所有内容都在VS2008的同一台计算机上编译。据我所知(根据我的调试),问题如下:

我正在使用exe中的“new”操作符(在main下)创建我的类的实例,然后一旦我的类的构造函数执行需要内存分配的操作,类本身的内存位置就会被覆盖,就好像dll和exe使用相同的内存空间,但“下一个可分配的位置”不同补偿。因此,dll看不到在exe内部已经进行了分配,因此覆盖了类所在的内存区域。显然,这会导致内存问题

你知道为什么会这样吗?我尽了最大努力解释情况,但如果需要,我当然可以提供更多信息


提前谢谢。

请检查那些调试宏,这很重要。比如断言

它们在调试模式下编译


在发布模式下编译代码时,调试宏被禁用。

我发现问题是由于我的错误,类的头文件中缺少了两个公共成员变量。当我添加它们时,问题就解决了。

看起来像是内存泄漏。你在堆上覆盖了一些东西,我不这么认为。我已经在我的应用程序中使用这个类很长时间了,并且总是能够毫无问题地调试它。这个问题与.dll有关,因为只有当我将类导出为.dll,然后尝试使用该.dll调试应用程序时,才会发生此问题。