C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

C++内存泄露的检测(一)



Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。主要使用函数:_CrtDumpMemoryLeaks();

二 实例
#define _CRTDBG_MAP_ALLOC   //输出更详细的report
#include 
<stdlib.h>
#include 
<crtdbg.h>
//以上的内容必须放在其他include的前面

#include 
<vector>

class MyClass
{
private:
    
int *p;
public:
    MyClass()
    
{
        
if(p != NULL)
        
{
            p 
= new int(0);
        }

    }

    
~MyClass()
    
{
        
if(p != NULL)
        
{
            delete p;
            p 
= NULL;
        }

    }

}
;

int _tmain(int argc, _TCHAR* argv[])
{
    
int *= NULL; // better for read
    i = new int(0);    
    
int *&= i; // pointer's reference

    MyClass 
*pMyClass = new MyClass();

    std::vector
<MyClass*> myClasses;
    myClasses.push_back(
new MyClass());
    myClasses.push_back(
new MyClass());

    _CrtDumpMemoryLeaks();
    
return 0;
}

三说明
1)只对debug模有用,可以在程序运行后在vs的ide的output的最后看到泄露的检测结果。
2)可以检测系统类型,自定义类型和stl 容器。
3)#define _CRTDBG_MAP_ALLOC   //包含该宏定义输出更详细的report
      #include <stdlib.h>
      #include <crtdbg.h>
      //以上的内容必须放在其他include的前面,否则可能使上面定义的宏失效。
4)如果程序有统一的退出口,则在退出时调用_CrtDumpMemoryLeaks();
5)如果程序有多个出口,则可以在程序开始处包含下面的调用:_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );这条语句无论程序在什么地方退出都会自动调用 _CrtDumpMemoryLeaks。

四 更多(更多的API和demo的下载)
http://msdn2.microsoft.com/zh-cn/library/fxszt639(VS.80).aspx

五 其他同类文章
http://www.cppblog.com/zhouhuishine/archive/2008/01/22/41609.html

posted on 2007-07-19 16:39 梦在天涯 阅读(4541) 评论(3)  编辑 收藏 引用 所属分类: CPlusPlus

评论

# re: C++内存泄露的检测(一) 2007-07-20 09:58 Envas

不错,不过还可以根据内存泄露的规律,采取人为泄露方式,逐步逼近所要查找的内存泄露的地方  回复  更多评论   

# re: C++内存泄露的检测(一) 2007-07-24 10:13 黄大仙

好  回复  更多评论   

# re: C++内存泄露的检测(一) 2007-08-24 21:12 DeathKnight

use bounds check  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1745002
  • 排名 - 5

最新评论

阅读排行榜