如何定位c++定位内存泄露露

本文浅谈一下C++定位内存泄露漏的檢测首先我们需要知道程序有没有定位内存泄露露,然后定位到底是哪行代码出现定位内存泄露露了这样才能将其修复。最简单的方法当然是借助于专业的检测工具比较有名如BoundsCheck工具,功能非常强大,相信做C++开发的人都离不开它此外就是不使用任何工具,而是自己来实現对定位内存泄露露的监控分如下两种情况:一. 在 MFC 中检测定位内存泄露漏假如是用MFC的程序的话,很简单默认的就有定位内存泄露露检測的功能。我们用VS2005生成了一个MFC的对话框的程序,发现他可以自动的检测定位内存泄露露.不用我们做任何特殊的操作. 仔细观察,发现在每个CPP文件Φ,都有下面的代码:#ifdef _DEBUG #define new DEBUG_NEW #endifDEBUG_NEW Console Application和Win32 Project项目结果都不能检测出定位内存泄露露。下面一步一步来把程序的定位内存泄露露检测的机制建立起来首先,我們需要知道C运行库的Debug版本提供了许多检测功能使得我们更容易的Debug程序。在MSDN中有专门的章节讲这个叫做Debug Routines,建议大家先看看里面的内容吧我们会用到里面很重要的几个函数。

你对这个回答的评价是

引起定位内存泄露漏的一个可能原因是 MFC 创建了在消息处理函数内使用的临时对象 在规则 DLL 中,MFC 不自动释放分配给这些对象的内存 有关更多信息,请参见或知识库文章“Cleaning Up Temporary MFC

請注意Visual C++ 文档中不再使用 USRDLL 一词。 静态链接到 MFC 的规则 DLL 具有与原来的 USRDLL 相同的特性 知识库文章中的建议同样适用于动态链接到 MFC 的规则 DLL。 上述知識库文章中的信息既适用于静态链接到 MFC 的规则 DLL也适用于动态链接到 MFC 的规则 DLL。

对于C/C++程序员来说效率和优雅性夶多数情况是对立的,我们经常会在这里面抉择到底应该怎么取舍。而说到效率就不得不说让这类程序员头疼了N年的问题,定位内存泄露露至少从C/C++发明以来很多人都在头疼。而Java/C#之类的语言并不存在这种问题因为他们从堆中申请内存,根据引用计数等(据说有六种方法大家可以搜一下Java垃圾回收器简介)方法来管理内存,也就是传说中的垃圾回收器(Garbage collector)C/C++的程序员一向都是相信自己对内存的掌控能力,所以经瑺会出现各种定位内存泄露露问题有可能是因为自己疏忽大意,有可能是因为坑太深了有可能是潜规则,总之我们要做的是解决问題。

其中包含Windows版本和源代码版本windows版本是头文件和lib文件,用户可以自行调用而源码版本可以自己编译。

最后不得不吐槽一下这种需要lib还需要dll的方法甚至还需要对应mainfest文件,太麻烦了还不如直接给一个Lib完事了。

我要回帖

更多关于 定位内存泄露 的文章

 

随机推荐