【发布时间】:2018-04-04 06:25:24
【问题描述】:
我开发了一个由主要可执行文件和动态库 (dll) 组成的应用程序。它们都是由我开发的,并且在 Windows 10 Pro 上使用相同的编译器(仅供参考:两者都包含在相同的 VS 解决方案中)构建。
当我想使用MS CRT 库测试可执行文件和库是否存在内存泄漏时。我可以检测到可执行文件中的内存泄漏,但不能检测动态库中的内存泄漏(我故意用一个未删除的整数泄漏两者)。
可执行文件是用 MDd 构建的,而库是用 MTd 构建的。我还尝试使用 MTd 构建可执行文件,但没有成功。 (由于其依赖关系,库必须使用 MT(d) 构建)。另外请注意,我并不是说我有较小的内存泄漏报告(比如没有文件名和行),我的意思是至少应该有一个 dll 报告时没有报告。
问题是是否有人遇到过这个问题并且知道如何解决它。
【问题讨论】:
-
更好地使用 Dr Memory:drmemory.org。与已知会在内存泄漏上给出误报的 MS CRT 库不同,我发现 Dr Memory 也更加准确和信息丰富
-
感谢您的建议,我实际上尝试过使用它,但由于windows版本错误而关闭(我在问题中添加了开发操作系统)。
-
仅供参考,它与 Windows 10 兼容
-
由于静态链接到 CRT,DLL 有自己的副本,因此也有自己的堆。您可以尝试在进程分离时在 DllMain 中调用 _CrtDumpMemoryLeaks。
-
与其编辑问题以添加解决方案,不如将其发布为答案! Answering your own question is not forbidden,但officially encouraged。 (甚至可以选择直接在Ask a Question 页面回答问题)
标签: c++ c++11 visual-c++ memory-leaks crt