我用最多的排查c程序的内存问题嘚工具就是valgrind了但是它这个工具有时候不是太好用,比如说速度很慢,平时运行一次1s的程序用valgrind排查可能要10s左右,还有没有好用的工具那这不就发现了一个快速内存错误检测工具:Address Sanitizer。
注意编译安装gcc的过程超级慢要1-2个小时。2. 编译时候添加选项:
编译的时候说缺少个依赖嘚库通过:
注意:Address Sanitizer 会替换malloc和free,如果采用第三方的内存申请库则无法替换,会造成功能缺失
缺少动态库,解决办法:
后面还有影子内存一些指示后续再开一篇聊下,主要我也不熟悉哈哈:)
按照同样办法编译,测试如下:
就是申请了一块内存区域释放后没有设置为NULL,後续继续使用了代码示例:
同样的编译方法,报错如下:
这些错误类型比valgrind分的更细致点让我们来看看代码:
很不幸,这个翻车了就算我把循环改成了100也是可以正常处理的,另外在gcc下没有告警在clang中倒是在编译的时候就给出了告警信息:
编译器改成g++,编译命令如下:
在我gcc嘚4.9.4版本情况下,如果按照上述编译和运行后并没有看到任何内存泄漏的提示, 在clang的编译器下可以通过:
运行程序来显示内存泄漏,但昰我的gcc的版本还是低了还是无法显示内存泄漏,索性直接升级到最新版本升级过程太慢,这个无法忍受我还是先用clang编译器测试下。
提示:有时候我们编译程序通过-g 或-ggdb调试仍然有问题只显示地址,这里面可以试试这个办法:
按照上面的方法升级到9.3.0運行缺少库:安装:
永遇乐·京口北固亭怀古
千古江山,英雄无觅孙仲谋处。
舞榭歌台风流总被、雨打风吹去。
想当年金戈铁马,气吞万里如虎
四十三年,望中犹记烽火扬州路。
凭谁问:廉颇老矣尚能饭否?
公司2017年度优秀员工
诛却欲就此機灭吴。孙权启用儒将
并赐宝剑先斩后奏。因刘备不懂兵法扎营之时犯兵家大
,汉军大败刘备逃命过程中为赵云所救。陆
为黄承彥所救,因而深服诸葛亮之才
[1] 曹丕趁火打劫,乘机征吴陆逊早有防备。大将徐盛
攻破了魏军魏国名将张辽在此
你对这个回答的评价昰?
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。