使用C++语言,可以直接对内存进行操作,在提供了便利的同时也要求程序员有较高的内存保护意识。
valgrind是一个开源的Linux平台下的内存分析以及程序架构分析的很好的工具。
一:下载valgrind安装包
二:安装valgrind安装包
1、进入安装包解压后的目录文件夹 cd valgrind
2、运行 ./configure
备注:若提示命令没有执行的权限,则将该valgrind文件夹的权限修改为 可读写
3、编译 make
4、安装 make install
三:使用valgrind工具检查代码
1、进入自己程序所在的目录 mypro
cd /
2、valgrind --tool=memcheck --leak-check=full --log-file="mypro.log" ./mypro
其中,
--tool=memcheck :valgrind包括六种程序检测工具(memcheck;callgrind;cachegrind;helgrind;massif;extension),这里只使用第一种memcheck
--leak-check=full :memcheck工具主要检查内存的使用情况,对内存泄露给出详细信息
--log-file="mypro.log" :自己程序mypro退出后,memcheck将对内存进行检测,并生成测试文件,存储在mypro.log中,该文件的创建路径需要与mypro在同一个目录下。
备注:若没有--log-file="mypro.log" 运行参数,则memcheck的检测结果会在控制台中输出。
四:查看测试结果文件
1、打开文件mypro.log,可通过关键字查找定位错误位置
Invalid read:memcheck认为程序对不应该访问的内存进行了读操作
Invalid write:memcheck认为程序对不应该访问的内存进行了写操作
Mismatched free:memcheck检测到内存申请与释放不匹配
(用malloc申请,必须用free释放;用new申请,必须用delete释放;用new[]申请,必须用delete[]释放)
Conditional jump or move depends on uninitialised value:程序使用了没有经过初始化的变量。
(函数局部变量定义后要初始化;new的变量没有初始化)
LEAK SUMMARY:内存泄露总结。
五:总结
优先:
1、所有的错误均给出具体cpp名称以及代码行数,定位很准确!
2、各种类型错误检测比较齐全
不足:
1、对于程序运行过程中动态泄露的内存检测不明确,因为有些全局变量申请的内存空间在程序启动时初始化一次,在程序退出时会自动释放。而导致内存泄露的主要是一些程序运行过程中频繁的周期的进行内存的申请与释放的变量。