内存泄漏定位和处理
一、定位方法
1. 工具辅助类
- Visual Studio自带工具
- 案例:通过 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF) 开启调试堆,运行后查看输出窗口泄漏报告,定位 new / delete 不匹配(如 int* p = new int[5]; 未 delete[] p )。
- 案例:利用Memory Usage调试工具,对比前后内存快照,筛选增长模块(如循环内重复 new 对象未释放)。
- 第三方工具
- 案例:使用**Valgrind(Windows版叫MemCheck)**扫描 DLL 文件,检测 malloc / free 不匹配(如 void* ptr = malloc(100); 函数返回前未 free(ptr) )。
- 案例:通过BoundsChecker监控COM对象泄漏,如 CoCreateInstance 创建的接口未 Release 。
2. 代码审查类
- 智能指针误用
- 案例:原始指针与 std::shared_ptr 混用导致泄漏(如 int* p = new int; std::shared_ptr<int> sp(p); delete p; ,双重释放风险)。
- 案例: std::unique_ptr 未正确转移所有权(如函数返回 unique_ptr 时未用 std::move ,导致临时对象释放)。
- 资源句柄泄漏</


被折叠的 条评论
为什么被折叠?



