gpt4 book ai didi

c++ - FreeLibrary 后堆损坏?

转载 作者:行者123 更新时间:2023-11-30 02:54:34 52 4
gpt4 key购买 nike

在多个动态链接库的解决方案中,每次基本上只有一个库“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 版本时,从调试堆中获取诊断信息。这种堆损坏不会被发现,直到堆管理器需要访问该内存以释放它。然后砰的一声。

使用来自 <crtdbg.h> 的调试分配器及早发现这种腐败。许多调试工具通常可用于解决堆损坏错误。

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

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com