我有一个类使用该dll驻留在dll和exe中。 Exe只是在dll中创建类并调用其方法。在发布模式下编译时,一切正常。但是如果我在调试模式下使用MDd标志编译所有内容(包括我的类使用的OpenCV库),那么我得到:
Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
所涉及的所有二进制文件都使用完全相同的运行时dll版本,并且所有内容都在VS 2008的同一台计算机上编译。据我所知(基于我的调试),问题如下:
我正在使用exe中的“new”运算符创建我的类的实例(在main下)然后,只要我的类的构造函数执行需要内存分配的操作,类本身的内存位置就会被覆盖,就像dll和exe都使用相同的内存空间但不同的“下一个可用位置来分配”偏移量。因此,dll没有看到在exe内部已经完成了分配,因此覆盖了我的类所在的内存区域。显然,这会导致内存问题。
知道为什么会发生这种情况?我尽力解释这种情况,但如果需要,我当然可以提供更多信息。
提前致谢。
答案 0 :(得分:0)
请检查那些DEBUG MACRO,这是至关重要的。有点像ASSERT ......
在调试模式下编译它们。
在发布模式下编译代码时,将禁用调试MACRO。
答案 1 :(得分:0)
我发现问题是我的错误导致该类头文件中缺少2个公共成员变量。当我添加它们时,问题就解决了。