2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > c++应用程序内存泄露检测

c++应用程序内存泄露检测

时间:2018-08-14 21:59:31

相关推荐

c++应用程序内存泄露检测

前言:c++及c这种底层的编程语言,在获得更多程序控制自由度的同时,也承担了更多内存泄露的风险,有些同学想说,内存泄露只要看下c++的应用程序在运行时内存有没有一直增加不就行了吗,windows和linux系统都有现场的工具可以查看,但如果有些内存泄露了,只在程序结束时才被释放出来,从内存的占用量根本看不出来。

valgrind工具是一款在linux系统中运行的可以直接对应用程序进行内存泄露检测的工具,该工具可以直接定位到cpp文件的函数模块,可以说非常细致了,定义到函数模块在检查内存泄露可以说基本没什么问题了。在c++代码中常见的代码泄露问题大致有以下几种:

memset内存块没有释放掉,这种情况其实看系统的占用量就能看出来,一般出现这种情况,内存占用量会一直上升,直到系统崩掉。malloc内存块没有释放掉;memset与delete之间不能有return,否则存在内存泄漏风险,在delete之前就已经返回了导致内存没有释放掉。这种情况比较难排查,光看系统内存的占用量是看不出来的,需要用专门的工具才能检测出来。malloc与free之间不能有return,否则存在内存泄漏风险,在free之前就已经返回了导致内存没有释放掉。同上这种情况也比较难排查。访问了已经释放掉的内存区域;访问了未定义的内存区域;

通过定义到函数模块再检测泄露的具体行就容易多了。

目录

1 valgrind工具安装

2. 工具使用

1 valgrind工具安装

ubuntu下直接使用命令安装:

sudo apt-get install valgrind

2. 工具使用

准备好待检测的c++应用程序,打开终端,使用命令:

valgrind --leak-check=full ./test_progress

工具会一步步检测,并运行你的程序,当程序运行完或者你使用ctrl+c暂定后,工具会输出检测的结果:

你可以试一下你自己的应用程序,打马赛克地方就是程序可能出现内存泄露的地方,可以具体去查一查,但不一定会存在,正如提示的:“are possibly lost in loss record”。

在最后红色框内是总结的内容:

确定存在内存泄露的:1872字节,这个是肯定需要修复的

间接内存泄露的:0字节

可能存在泄露的:这个也有可能是程序没有结束导致的

目前就学到这些,后续有什么新的心得再更新吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。