生活工程体验信仰哲学精神
投稿投诉
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

Linux系统下如何检测内存泄露?

6月2日 飞虹谷投稿
  01。前言
  CC运行高效,不管是操作系统内核还是对性有要求的程序(比如游戏引擎)都要求使用CC来编写,其实CC强大的一点在于能够使用指针自由地控制内存的使用,适时的申请内存和释放内存,从而做到其他编程语言做不到的高效地运行。但是内存管理是一把双刃剑,用好了削铁如泥,用不好自断一臂。在申请堆上内存使用完之后中如果做不到适时有效的释放,那么就会造成内存泄露,久而久之程序就会将系统内存耗尽,导致系统运行出问题。就如同你每天跑去图书馆借一打书籍而不还,直到图书馆倒闭为止。
  C语言中申请内存和释放内存的方法是使用malloc和free。
  C中能兼容C,所以也能使用malloc和free,面向对象的情况下使用的则是new和delete,能够自动执行构造函数和析构函数。
  在Linux平台,我们可以使用valgrind命令检测CC程序是否内存泄露。
  02。valgrind安装
  debianubuntu下安装方法:
  dengitcast:sudoaptinstallvalgrind
  dengitcast:sudoyuminstallvalgrind
  安装好valgrind工具之后,下面来看看valgrind的几个应用场景。
  redhatcentos下安装方法:
  03。使用未初始化的内存
  程序中我们定义了一个指针p,但并未给他分配空间,但我们却使用它了。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){printf(chc,ch);return0;}
  valgrind检测出到我们的程序使用了未初始化的变量。
  04。使用野指针
  p所指向的内存被释放了,p变成了野指针,但是我们却继续使用这片内存。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){intpNULL;pmalloc(sizeof(int));if(NULLp){printf(mallocfailed。。。);return1;}memset(p,0,sizeof(int));p88;printf(pd,p);释放内存free(p);printf(pd,p);return0;}
  valgrind检测到我们使用了已经free的内存,并给出这片内存是哪里分配和哪里释放的。
  05。动态内存越界访问
  我们动态地分配了一片连续的存储空间,但我们在访问个数组时发生了越界访问。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){inti0;intpNULL;pmalloc(5sizeof(int));if(NULLp){printf(mallocfailed。。。);return1;}memset(p,0,10sizeof(int));for(inti0;i5;i){p〔i〕i1;}for(inti0;i5;i){printf(p〔d〕:d,i,p〔i〕);}return0;}
  valgrind检测出越界信息如下。
  注意:
  valgrind不检查非动态分配数组的使用情况
  06。分配空间后没有释放
  内存泄漏的原因在于我们使用free或者new分配空间之后,没有使用free或者delete释放内存。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){intpNULL;pmalloc(sizeof(int));p88;printf(pd,p);return0;}
  valgrind的记录显示上面的程序用了1次malloc,却调用了0次free。
  可以使用leakcheckfull进一步获取内存泄漏的信息,比如malloc具体行号。
  07。不匹配使用delete或者free
  一般我们使用malloc分配的空间,必须使用free释放内存。使用new分配的空间,使用delete释放内存。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){intpNULL;p(int)malloc(sizeof(int));p88;printf(pd,p);return0;}
  不匹配地使用mallocnewnew〔〕和freedeletedelete〔〕则会被提示mismacth
  08。两次释放同一块内存
  一般情况下,内存分配一次,只释放一次。如果多次释放,可能会出现doublefree。
  程序示例:includestdio。hincludestring。hincludestdlib。hintmain(void){intpNULL;p(int)malloc(sizeof(int));p88;printf(pd,p);return0;}
  多次释放同一内存,出现非法释放内存。
  09。总结
  内存泄露问题非常难定位,对于小工程项目来说,简单去检查代码中new和delete的匹配对数就基本能定位到问题,但是一旦代码量上升到以万单位时,仅靠肉眼检查来定位问题那就非常困难了,所以我们需要利用工具帮助我们找出问题所在。在Linux系统下内存检测工具首推Valgrind,一款非常好用的开源内存管理工具。Valgrind其实是一个工具集,内存错误检测只是它众多功能的一个,但我们用得最多的功能正是它memcheck。推荐了解传智播客C培训课程。
  总之,valgrind工具可以检测下列与内存相关的问题:
  未释放内存的使用
  对释放后内存的读写
  对已分配内存块尾部的读写
  内存泄露
  不匹配的使用mallocnewnew〔〕和freedeletedelete〔〕
  重复释放内存
投诉 评论 转载

新编狐假虎威自从老虎知道自己被狐狸骗了以后,心里非常生气,老虎几天都不好意思出门。老虎心想:好一只臭狐狸,居然敢欺骗到我万兽之王的头上,如果下次再让我见到了那只狐狸,我一定要将他千刀万剐,……Linux系统下如何检测内存泄露?01。前言CC运行高效,不管是操作系统内核还是对性有要求的程序(比如游戏引擎)都要求使用CC来编写,其实CC强大的一点在于能够使用指针自由地控制内存的使用,适时的申请内存……贵阳小学将游泳设为必修课,中广欧特斯泳池热泵助力游泳教育发展据《贵州日报》11月18日报道,在贵阳市实验小学刚建成的恒温游泳馆内,学生们正在接受游泳课训练。据悉,该游泳馆的建成,意味着该校将成为贵州省第一家将游泳课设为必修课的小学。……不同的宇宙有不同的物理规律,整体宇宙恒定不变什么是整体宇宙?什么是不同宇宙?所谓的整体宇宙我们可以称它为大宇宙,不同宇宙就是不同的小宇宙,大宇宙由不同的小宇宙构成,可能会有人问,大宇宙怎么形成的?它有起点吗?他有结束的那……端午节是几月几号农历五月初五端午节的来历端午节为每年农历五月初五,又称端阳节、午日节、五月节、五日节、艾节、端五、重午、午日、夏节,本来是夏季的一个驱除瘟疫的节日。端午节是我国汉族人民的传统节日,这一天必不可少的活动……交通安全教育节目观后感今天下午,学校给我们放映了一个名为《交通安全教育》的节目。观后,我深感震惊。这个节目通过两位同学之间的抢答竞赛,告诉了我们交通安全常识。这节目中提到的知识我早已熟记……黄山毛峰是绿茶么黄山毛峰茶也被称为毛峰绿茶,毛峰茶,被视为中国绿茶的顶级。黄山毛峰绿茶起源于伏羲村的深山谷。在20世纪90年代,这种茶已经变得如此成功和受欢迎,黄山产量达数千吨。这种茶是在中国……国投高新独角兽猎手旗下基金投资宁德时代、寒武纪、信达生物制药等7家独角兽企业,这家运筹千亿规模的央企投资公司浮出水面。作为国家开发投资公司(国投集团)旗下最为市场化的投资公司,中国国投高新……世界上有没有鬼诡异的环境现象或大脑的幻觉几乎所有人都会问世界上有没有鬼,鬼魂这种东西人类目前既不能证实它存在,也不能证实它不存在,但如今更多的说法是鬼是不存在的,看到疑是鬼的现象只是幻觉或者环境制造的假象,让你误以为……三只都很美的医美股龙头在这个看脸和靠脸吃饭的时代,女性颜值经济蓬勃发展也就顺理成章了。目前,中国医美市场的渗透率仅接近4,而日本、美国和韩国分别达到11、17和20。不难看出,中国医美市……目标实现甲:你有车有房有对象的目标实现了么?乙:实现了啊。。。。甲:我怎么就看到你还骑着破单车,住着出租房,还有。。。。也没看到你有带女朋友出现过呀。。。。乙:我当初……新疆最厉害的景区一年四季都在冒石油提及素有歌舞之乡美称的新疆,除了以其曼妙的舞姿、独具少数民族风情的服饰而著称的新疆舞之外,脑海里浮现的只有新疆的美食。像大盘鸡、烤全羊、哈密瓜、葡萄干等这些,一听就能让人口水直……
阿莱尼亚为梅西正名!他不是梅老五他是世界第一50,强势!德甲8。6亿豪门连场爆发,世界足坛欠莱万一个金球17岁零24天,加维成巴萨一线队西甲首秀第四年轻的球员新赛季湖人队首发1。28亿,篮网队发1。47亿,勇士和太阳呢中国三人篮球未来可期王霜加时世界波绝杀!绝处逢生用意志淘汰韩国,中国姑娘太伟大了35岁的巴特勒年薪4800万,36岁的杜兰特和37岁的库里呢长津湖票房超24亿,吴京排片至2030年,超越沈腾成影视新宠肆意偏袒还是刻意针对?!东京奥运会上那些对中国队的不公平奥运会田径比赛,有田赛和径赛区别那分别是什么项目?乔治背景板,库里超神表现,勇士主场险胜快船您相信人们会永远不得病(大病),不花钱吗?泰山队日历之8月11日2012年8月11日,鲁能四球大胜北京整理与复习(3)教案春天的小路五年级作文荆州方特吃饭贵吗荆州方特可以自带食物吗多走路腿会瘦吗有氧运动方式沃尔沃宣布评估IPO可能性吉利仍为最大股东国乒最强女团首次直播,刘诗雯秀粤语,孙颖莎展歌喉,陈梦赞伊藤癌症若向你靠近腰上会亮起2个红灯别再视而不见信用卡的八大雷区金九银十,双11大促前打爆款的关键时刻,淘宝卖家该如何布局呢女士搓边头短发发型简约不乏韵味气质爆棚成长的旋律

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找