CRT没有检测到DLL中的内存泄漏

时间:2018-04-04 06:25:25

标签: c++ c++11 visual-c++ memory-leaks crt

我开发了一个由主可执行文件和动态库(dll)组成的应用程序。它们都是由我开发的,并且在Windows 10 Pro上使用相同的编译器(仅供参考:两者都包含在相同的VS解决方案中)构建。

当我想使用MS CRT库测试可执行文件和库是否存在内存泄漏时。我可以检测可执行文件中的内存泄漏,但不能检测动态库中的内存泄漏(我故意用一个未删除的整数泄漏)。

可执行文件是使用MDd构建的,库是使用MTd构建的。我也尝试使用MTd构建可执行文件但没有成功。 (由于其依赖性,库必须用MT(d)构建)。另外请注意,我并不是说我有较小的内存泄漏报告(比如没有文件名和行),我的意思是没有dll的报告应该至少有一个。

问题是,是否有人遇到此问题并知道如何解决问题。

2 个答案:

答案 0 :(得分:0)

您的DLL没有使用MFC?然后就出现了问题,MFC中的内存泄漏检测会覆盖自己的分配器中的本机C ++,并使用Microsoft文档中提到的宏。我担心你必须在.LL中重新实现跟踪方法,如果它没有使用它.crt lib与_CRTDBG_MAP_ALLOC跟踪malloc,不接触本地operator new。< / p>

答案 1 :(得分:0)

Johannes Passing在他的博客文章中提到,当DLL链接到CRT的静态版本时,正确的内存转储就是DllMain的DLL_PROCESS_DETACH案例。

https://jpassing.com/2008/09/01/effective-leak-detection-with-the-debug-crt-and-application-verifier/