zoukankan      html  css  js  c++  java
  • C++内存泄露的检测(一)


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

    二 实例

     1 #define _CRTDBG_MAP_ALLOC   //输出更详细的report
     2 #include <stdlib.h>
     3 #include <crtdbg.h>
     4 //以上的内容必须放在其他include的前面
     5 
     6 #include <vector>
     7 
     8 class MyClass
     9 {
    10 private:
    11     int *p;
    12 public:
    13     MyClass()
    14     {
    15         if(p != NULL)
    16         {
    17             p = new int(0);
    18         }
    19     }
    20     ~MyClass()
    21     {
    22         if(p != NULL)
    23         {
    24             delete p;
    25             p = NULL;
    26         }
    27     }
    28 };
    29 
    30 int _tmain(int argc, _TCHAR* argv[])
    31 {
    32     int *i = NULL; // better for read
    33     i = new int(0);    
    34     int *&y = i; // pointer's reference
    35 
    36     MyClass *pMyClass = new MyClass();
    37 
    38     std::vector<MyClass*> myClasses;
    39     myClasses.push_back(new MyClass());
    40     myClasses.push_back(new MyClass());
    41 
    42     _CrtDumpMemoryLeaks();
    43     return 0;
    44 }

    三说明
    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

  • 相关阅读:
    iOS构建流畅的交互界面--卡顿产生的原因
    iOS-tableViewCell重用机制带来的问题及解决
    完全背包
    poj1384
    RunLoop的使用--AFNetworking的网络线程实现+tableView延迟加载图片+App崩溃后立即重启
    poj 3624
    01背包
    poj1416
    java中 File文件常用操作方法的汇总
    线程中涉及到的知识点总结
  • 原文地址:https://www.cnblogs.com/FCoding/p/2576867.html
Copyright © 2011-2022 走看看