首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法检测静态附加到C++程序的DLL中的内存泄漏

无法检测静态附加到C++程序的DLL中的内存泄漏
EN

Stack Overflow用户
提问于 2013-01-13 16:51:11
回答 1查看 1.6K关注 0票数 0

我有一个主机程序,它隐式地(通过库和它们的DLL)加载DLL。当我故意造成内存泄漏时,在我的主机程序中,CrtDbg*函数会检测到泄漏。当我故意在其中一个DLL中造成内存泄漏时,未检测到该泄漏。

注意:在我的主机中,我在主函数终止后激活_CrtDumpMemoryLeaks函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-13 17:18:08

您的DLL很可能是静态链接到CRT的。(或者它们是零售版本,但您的EXE是调试版本)。无论哪种方式,您都有多个堆。当您调用_CrtDeumpMemoryLeaks时,它只能跟踪执行调用的二进制文件的未释放内存分配。您有两个选择。

  • 将所有代码(DLL和EXE)更改为链接到相同的MSVCRT DLL,而不是静态链接。在每个二进制文件的项目设置中,选择“多线程调试DLL”或“多线程DLL”作为CRT的链接类型。不要选择静态。则所有DLL和EXE将共享同一堆。

  • 从每个名为"DetectMemoryLeaks“的动态链接库中导出一个函数(对于其他动态链接库,也可以使用类似的命名函数,这样就不会出现命名冲突)。此函数仅调用_CrtDumpMemoryLeaks。在EXE中,大约在调用_CrtDumpMemoryLeaks的同时调用此函数。将检查每个DLL中的每个堆是否有泄漏。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14302008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档