- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何检测及隔离内存泄漏
如何检测和隔离内存泄漏(文章)?(xxf2002发表于2001-8-23 11:24:51)
???????????????????????????????? 使用Microsoft Visual C++来检测和隔离内存泄漏 简介:
具有动态的分配和释放内存的能力是C/C++程序语言的重要特色之一,但是中国的哲人孙子指出,最强有力的也是最脆弱的。对C/C++应用程序来说这当然是正确的,内存管理错误通常是bug起源之一。非常微妙且难于检测的bug之一就是内存 泄漏——不能正确地去分配已经分配了的内存。一个仅仅发生一次的轻微内存泄漏不可能引起注意,但是泄漏了大量内存或者日益增多的泄漏的程序可能表现出征兆,从可怜的(和慢慢地减少)性能到内存不足而完全失灵。更坏的是,一个有泄漏的程序可能占用很多的内存以至于导致另一个程序失灵,留给用户的只是对问题的一无所知。此外,一个严重的内存泄漏甚至可能是其他问题的征兆。
幸运的是,Visual C++ debugger 和 CRT库提供给你一系列有效的检测和鉴定内存泄漏的工具。这篇文章阐述了如何使用这些工具去有效并系统的隔离内存泄漏。
设置内存泄漏检测
检测内存泄漏的基本工具是调试器和CRT调试堆函数。为了使用调试堆函数,在你的程序中你必须含有下面的说明:??#define _CRTDBG_MAP_ALLOC??#include stdlib.h??#include crtdbg.h??#include说明必须按顺序说明。如果你改变了顺序,你所用的函数可能不能正常工作。包含crtdbg.h的_malloc_dbg和 _free_dbg将 malloc和free函数映射到测试版中,它可以跟踪内存的分配和释放。这种映射仅仅在一个测试体系中发生(也就是说,仅仅当_DEBUG被定义的时候)。释放的体系使用通常的malloc和 free功能。??#define说明映射CRT堆函数的低级版本到相应的测试版本。这个说明是不需要的,但是没有它,内存泄漏处含有的只是没有多大用处的信息。??一旦你已经增加了刚才的说明,你能够通过在你的程序中包含下面的说明来释放内存信息:??_CrtDumpMemoryLeaks();??当你在调试情况下运行你的程序时,在输出窗口的Debug 标签处_CrtDumpMemoryLeaks表现出内存泄漏的信息。内存泄漏信息类似下面这样:??Detected memory leaks!??Dumping objects -??C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long.??Data: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ??Object dump complete.??如果你没有用#define _CRTDBG_MAP_ALLOC说明,内存漏洞堆存处类似下面这样:??Detected memory leaks!??Dumping objects -??{18} normal block at 0x00780E80, 64 bytes long.??Data: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ??Object dump complete.??像你所知道的,当_CRTDBG_MAP_ALLOC被定义时,_CrtDumpMemoryLeaks给了你更多的有用信息。如果_CRTDBG_MAP_ALLOC没有被定义,那么将向你如下显示:??内存分配数值(花括号内) ??模块的类型(normal、client或者CRT) ??以十六进制格式定位的内存 ??以字节计模块的大小 ??第一个十六字节的内容(也可以用十六进制) ??当定义了_CRTDBG_MAP_ALLOC的时候,显示的内容也向你展现了出现泄漏内存所分配地方的文件。在文件名之后括号内的数字(20,以此为例)是文件内的行数值。如果你双击包含行数值和文件名的输出行,??C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long.??指针将会跳到源文件中内存被分配地方的行(在上面的情况下,leaktest.cpp的行号为20)。选择输出行并按F4将有同样的效果。
您可能关注的文档
最近下载
- 风电项目植被恢复工程投标方案(技术方案).docx
- 【公开课】生态系统的能量流动课件高二上学期生物人教版选择性必修2.pptx VIP
- 2024-2025学年度甘肃省合作市中考数学真题分类(一次函数)汇编专项测试练习题(解析版).docx
- 2025年成都高新区面向社会公开招聘员额教师(三组学校)(201人)笔试备考试题及答案解析.docx
- 如何上好低年级语文课.docx
- 20S517- 排水管道出水口.pdf
- 新人教版地理七年级下册《东南亚》ppt课件.pptx
- 小升初语文四大名著知识点汇总.pdf VIP
- (精选)中国古代教育课件.ppt
- 2024年卫星互联网行业分析报告:“天地一体”手机直连卫星加速演进.pdf
文档评论(0)