c++内存泄露(三):定位和解决内存泄露
2017-10-11 17:42
169 查看
如果编写的c++程序出现内存泄露了,不要慌忙,你要相信任何错误都是人为造成的,只要是人为的,你一定能找到错误所在,只不过是时间的问题而已。在面对内存泄露,如果程序不是特别长的话,你可以使用人工校验,着重查看new和delete的匹配调用。
如果经过一番折腾还未确定程序的错误所在,首先应该明白程序在不停地循环调用的是那部分程序,然后对这部分程序做特殊的处理,逐行验证,然后确定错误所在。
如果还是找不到,那么我们只能借助工具,进行错误泄露的定位了。
首先,介绍的是VLD(Visual Leak Detector),这是一个免费的、开源的、强大的内存泄露检测系统,可以安装当作VS的一个插件。
http://vld.codeplex.com/
在安装完成后,在工程中指定其include header和library file的路径,然后添加头文件
#include <vld.h>
这样就可以使用了。
如例子:
双击1位置的错误列表,即可定位到错误的所在
修改vld.h :ReportFile和ReportTo可以将日志打印到目标文件内。
如果你的程序还存在内存泄露,那你不妨试一下将一些内存申请过程使用智能指针进行实现。
c++内存泄露(一):理解内存泄漏及内存泄漏常见情况
c++内存泄露(二):使用性能监视器进行内存泄露的确认
如果经过一番折腾还未确定程序的错误所在,首先应该明白程序在不停地循环调用的是那部分程序,然后对这部分程序做特殊的处理,逐行验证,然后确定错误所在。
如果还是找不到,那么我们只能借助工具,进行错误泄露的定位了。
首先,介绍的是VLD(Visual Leak Detector),这是一个免费的、开源的、强大的内存泄露检测系统,可以安装当作VS的一个插件。
http://vld.codeplex.com/
在安装完成后,在工程中指定其include header和library file的路径,然后添加头文件
#include <vld.h>
这样就可以使用了。
如例子:
#include "stdafx.h" #include <iostream> #include <vld.h> #include <string> #include <windows.h> using namespace std; int main() { while (true) { char *test = new char[100]; Sleep(1000); } cin.get(); return 0; }
双击1位置的错误列表,即可定位到错误的所在
修改vld.h :ReportFile和ReportTo可以将日志打印到目标文件内。
如果你的程序还存在内存泄露,那你不妨试一下将一些内存申请过程使用智能指针进行实现。
c++内存泄露(一):理解内存泄漏及内存泄漏常见情况
c++内存泄露(二):使用性能监视器进行内存泄露的确认
相关文章推荐
- C++内存泄露的定位与解决
- C++解决数据精度问题,对浮点数保存指定位小数
- C++内存泄露问题解决方案(转)
- 如何有效解决C与C++的相互调用问题
- Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
- 利用 gprof2dot 和graphviz 图形化定位linux c/c++系统性能瓶颈
- 定位解决banner图上的文字位置(定位元素和某元素左对齐)
- C++ - 函数模板(function template)右值引用参数 问题 及 解决
- 调用c++递归库文件解决背包问题
- 【剑指offer】解决面试题的思路 —— 顺时针打印矩阵(C++)
- c++ 深度优先算法解决八皇后问题
- 通过c++ 读写文本文件的中文乱码的解决方法
- 解决:pip install pyduktape失败,Microsoft Visual C++ 14.0 is required
- 从汇编的眼光看C++(之delete内存泄露)
- 无法定位序数XX于动态链接库XX.dll的解决的方法
- 现"eh.h is only for C++!"错误的解决方法
- c++ 导致内存泄露的一些小问题与解决方法
- appium 自动化:Android版本7.0以上定位不到元素,解决办法
- 关于相对定位与绝对定位无法冲破的等级的解决方法
- 记WIN32使用duilib时添加MFC类库发现内存泄露的问题解决