内存泄漏
检查内存泄漏
Linux 下使用 Valgrind;Windows 下使用 Visual Leak Detector。前者没接触过,后者的确不错。
虽然在 Windows 下可以使用 CRT:Find memory leaks with the CRT library,但因为其也会报全局变量以及 static
变量(报告早于这两者的析构),当项目体量较大,全局变量或 static
变量较多时,没有有效的区分,查找真实的内存泄漏就会比较棘手。
Enable memory leak detection,如何启用
只在启用
_DEBUG
时有效;若程序存在多个退出点,可以使用_CrtSetDbgFlag
函数;报告默认在“输出”窗口打印,但可以自定义。Interpret the memory-leak report,报告怎么看
重点强调了检测只针对
malloc
函数,无法检测new
操作符。但其提供了使用_malloc_dbg
实现的operator new
重载版本:Set breakpoints on a memory allocation number,如何打断点
Compare memory states,对比不同时刻的快照
False positives,误报现象
虽然文章中特别提到:
We don’t recommend you create a preprocessor macro named
new
, or any other language keyword.
但是在好多中文博客中都是通过直接定义 new
的同名宏来避免对代码主体的修改(文件头和 main 的修改无可避免):比如 vczh
在网络上找到一篇 关于全局变量内存泄漏的误报和解决方案,但并未验证。
crt
待补充
vld
Using Visual Leak Detector,其使用是非常简单的。建议在每个程序中都默认启用。
VS内存泄漏工具Visual Leak Detector2.5.1安装与使用