在多个动态链接库的解决方案中,基本上每次仅使用一个库“MyLibrary.dll”就会发生堆损坏,但对于“MyOtherLibrary.dll”则不能这么说。
相关代码段:

HINSTANCE hModule;

hModule = LoadLibrary("MyLibrary.dll");

// hModule is checked and definitely valid

if(hModule)
{
    FreeLibrary(hModule);   // HeapCorruption occurs now, but ONLY for "MyLibrary.dll"
}

我真的不知道出了什么问题。在我看来,我必须在VS项目设置中进行某些更改,但是我既不知道要更改什么也不知道为什么。库中也可以包含一些代码吗?

附加信息:“MyLibrary.dll”项目是使用CMake 2.8创建的,并已使用Visual Studio 2010 SP1成功构建(但项目“MyOtherLibrary.dll”也是如此)。

有人可以帮忙吗?

最佳答案

 // HeapCorruption occurs now, but ONLY for "MyLibrary.dll"

评论是错误的。应该说
 // HeapCorruption is detected now.

这是一个非常常见的情况,当代码终止时,可能会释放一些已经使用了一段时间的内存。提供足够的机会使内存因指针错误和代码中的缓冲区溢出而损坏。或当EXE和DLL使用不同的CRT版本时,从调试堆中获取诊断信息。直到堆管理器需要访问该内存以释放它时,这种堆损坏才被发现。然后,Kaboom。

使用<crtdbg.h>中可用的调试分配器可以更早地捕获这种损坏。通常,有许多调试工具可用来解决堆损坏错误。

关于c++ - FreeLibrary之后堆损坏了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16979484/

10-15 10:11