声明:checkleaks.h和checkleaks.cpp这两个文件中的代码是在网上COPY的,但原来那个网站现在却找不到了

所以,这篇文章不算完全原创,呵呵。

就当作是一个存档吧

先上代码:

  1. //checkleaks.h
  2. #ifndef SET_DEBUG_NEW_H
  3. #define SET_DEBUG_NEW_H
  4. #ifdef _DEBUG
  5. #define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)
  6. #else
  7. #define DEBUG_CLIENTBLOCK
  8. #endif
  9. #define _CRTDBG_MAP_ALLOC
  10. #include <crtdbg.h>
  11. #ifdef _DEBUG
  12. #define new DEBUG_CLIENTBLOCK
  13. #endif
  14. #pragma once
  15. #if defined(WIN32)
  16. void setFilterDebugHook(void);
  17. #endif
  18. #endif
  19. //checkleaks.cpp
  20. #if defined(WIN32)
  21. #include <string.h>
  22. #include "crtdbg.h"
  23. #define FALSE   0
  24. #define TRUE    1
  25. _CRT_REPORT_HOOK prevHook;
  26. int reportingHook(int reportType, char* userMessage, int* retVal)
  27. {
  28. // This function is called several times for each memory leak.
  29. // Each time a part of the error message is supplied.
  30. // This holds number of subsequent detail messages after
  31. // a leak was reported
  32. const int numFollowupDebugMsgParts = 2;
  33. static bool ignoreMessage = false;
  34. static int debugMsgPartsCount = 0;
  35. // check if the memory leak reporting starts
  36. if ((strncmp(userMessage,"Detected memory leaks!/n", 10) == 0)
  37. || ignoreMessage)
  38. {
  39. // check if the memory leak reporting ends
  40. if (strncmp(userMessage,"Object dump complete./n", 10) == 0)
  41. {
  42. _CrtSetReportHook(prevHook);
  43. ignoreMessage = false;
  44. } else
  45. ignoreMessage = true;
  46. // something from our own code?
  47. if(strstr(userMessage, ".cpp") == NULL)
  48. {
  49. if(debugMsgPartsCount++ < numFollowupDebugMsgParts)
  50. // give it back to _CrtDbgReport() to be printed to the console
  51. return FALSE;
  52. else
  53. return TRUE;  // ignore it
  54. } else
  55. {
  56. debugMsgPartsCount = 0;
  57. // give it back to _CrtDbgReport() to be printed to the console
  58. return FALSE;
  59. }
  60. } else
  61. // give it back to _CrtDbgReport() to be printed to the console
  62. return FALSE;
  63. };
  64. void setFilterDebugHook(void)
  65. {
  66. //change the report function to only report memory leaks from program code
  67. prevHook = _CrtSetReportHook(reportingHook);
  68. }
  69. #endif
  70. //main.cpp
  71. #include <windows.h>
  72. #include <stdio.h>
  73. #include "checkleaks.h"
  74. int main()
  75. {
  76. //一定要加上这句,而且要在DEBUG模式下才会有报告输出
  77. _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  78. int *arr;
  79. arr = new int;
  80. return 0;
  81. }

程序输出:

    1. Detected memory leaks!
    2. Dumping objects ->
    3. e:\vs2008\try\ctemp\ctemp\main.cpp(9) : {62} client block at 0x00503DE8, subtype 0, 4 bytes long.
    4. Data: <    > CD CD CD CD
    5. Object dump complete.
    6. The program '[3348] ctemp.exe: Native' has exited with code 0 (0x0).

http://blog.csdn.net/small_qch/article/details/6856445

在VC中检测内存泄漏的更多相关文章

  1. VC使用CRT调试功能来检测内存泄漏

    信息来源:csdn     C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话.在 C/C+ ...

  2. 在VC++中启用内存泄露检测

    检测内存泄漏的主要工具是调试器和 CRT 调试堆函数.若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h># ...

  3. Vc 检测内存泄漏

    启用内存泄漏检测 检测内存泄漏是 C/c + + 调试器和 C 运行时库 (CRT) 的主要工具调试堆函数. 若要启用调试堆的所有函数,在 c + + 程序中,按以下顺序包含以下语句: C++复制 # ...

  4. 如何在linux下检测内存泄漏

    之前的文章应用 Valgrind 发现 Linux 程序的内存问题中介绍了利用Linux系统工具valgrind检测内存泄露的简单用法,本文实现了一个检测内存泄露的工具,包括了原理说明以及实现细节. ...

  5. 如何在linux下检测内存泄漏(转)

    本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 ...

  6. 使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)

    我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏.例如: class CMyApp : public CWinApp{public:BOOL InitApplicat ...

  7. Android性能优化之利用LeakCanary检测内存泄漏及解决办法

    前言: 最近公司C轮融资成功了,移动团队准备扩大一下,需要招聘Android开发工程师,陆陆续续面试了几位Android应聘者,面试过程中聊到性能优化中如何避免内存泄漏问题时,很少有人全面的回答上来. ...

  8. 系统剖析Android中的内存泄漏

    [转发]作为Android开发人员,我们或多或少都听说过内存泄漏.那么何为内存泄漏,Android中的内存泄漏又是什么样子的呢,本文将简单概括的进行一些总结. 关于内存泄露的定义,我可以理解成这样 没 ...

  9. 了解 JavaScript 应用程序中的内存泄漏

    简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理 ...

随机推荐

  1. ulimit开启coredump时核心转储

    [root@localhost ~]# ulimit -c [root@localhost ~]# ulimit -a core data seg size (kbytes, -d) unlimite ...

  2. VB编写的验证码生成器

    验证码(CAPTCHA)是“Completely AutomatedPublicTuring test to tell Computers andHumansApart”(全自动区分计算机和人类的图灵 ...

  3. android获得屏幕高度和宽度

    获取屏幕的宽度与高度有以下几种方法: .WindowManager wm = (WindowManager) getContext()                     .getSystemSe ...

  4. js中内建对象

    JavaScript charAt() 函数 string.charAt(n) -- 返回指定位置(n)的字符 char是character的缩写,中文"符号,字符" 引用网址:h ...

  5. Java 异常处理的误区和经验总结--转载

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  6. Java基础知识强化93:算一下你来到这个世界多少天的案例

    1. 分析: (1)键盘录入你的出生年月日 (2)把该字符串转换为一个日期 (3)通过该日期得到一个毫秒值 (4)获取当前时间的毫秒值 (5)用(4)-(3)得到一个毫秒值 (6)把E的毫秒值转换为天 ...

  7. Shell基本的命令

    ubuntu 中文乱码 如果使用的是 PuTTY,可以通过修改 font, character set 设置来解决. Window -> Appearance -> Font settin ...

  8. C++学习笔记39:进程概念

    进程的基本概念 进程是描述程序执行过程和资源共享的基本单位 主要目的:控制和协调程序的执行 进程相关函数 用户与组ID函数 创建进程:system(),fork(),exec() 终止进程:kill( ...

  9. Js实现简单的联动,无数据库版本

    <html> <head> <title></title> <script language="javascript" typ ...

  10. (转)PHP 的 __FILE__ 常量

    今天碰到了PHP的常量__FILE__的问题了. 在网上查了一下.总结了以下规律. dirname(__FILE___) 函数返回的是脚本所在在的路径. 比如文件 b.php 包含如下内容: < ...