<crtdbg.h> 的作用

原创 2016年05月30日 19:50:02

1、在调试状态下让win程在输出窗口中显示调试信息,可以用_RPTn 宏n为显示参数比如_RPT0(_CRT_WARN,"text"); 

  _RPT1(_CRT_WARN,"%d", iTest); _RPT2(_CRT_WARN,"%d,%f", iTest, fTest);....依次类推,详细见msdn

 

2、侦测内存泄露用_CrtSetDbgFlag函数 

   _CrtDumpMemoryLeaks()在程序退出点之前调用会在输出中产生内存泄露信息,但是如果程序有多个退出点则无需

   在所有退出点都调用该函数,取而代之的是简单的在main()一开始就首先调用

    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);这样程序会在退出前自动调用_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.
    要在Dumpint objects -> 后面产生文件名的话来确定 泄露文件与代码行号的话(见上面红字部分)则需要在

 

  #include <crtdbg.h>之前加上宏#define _CRTDBG_MAP_ALLOC 

 

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>      //msdn里面的例子加了该头文件
#include <crtdbg.h>
 

 

查找泄露技巧 使用_CrtSetBreakAlloc(long lBreakAlloc );函数参数为内存分配的次数,其值为调试信息的{}中的值

上面的例子为{18}

于是让程序自动在泄露处进入断点可以在_CrtSetDbgFlag后面添加函数_CrtSetBreakAlloc(18);然后调试程序时,程序

自动断在第18次分配内存的时的crt代码处,然后只要通过查看调用堆栈就可以轻松看到之前的泄露的代码了 

将VS2013项目转成VS2010项目的方法

1、首先用记事本之类的工具打开.sln文件 打开后会看到如下信息 Format Version 12.00 就是指VS2013 VisualStudioVersion...
  • sunwork888
  • sunwork888
  • 2015年03月16日 11:33
  • 3615

Spring的作用、Struts的作用、Hiberante的作用

Spring的作用 Struts的作用 Hiberante的作用
  • master_yao
  • master_yao
  • 2015年12月02日 21:21
  • 1818

static作用const作用

static: 1.声明为static的变量,即使是在函数内部;它也仅仅初始化一次,被存放在全局数据段内; 2.声明为static的全局变量,仅仅在本文件中具有可见性;其他文件不可见,防止命名冲突; ...
  • cwj649956781
  • cwj649956781
  • 2013年11月21日 10:07
  • 610

电容的作用?电容器的作用?

电容的作用? 电容的作用有滤波、耦合、旁路、去耦的功能。请问下: 1、滤波、旁路和去耦有什么区别? 2、滤波、旁路和去耦是指电容并联在电路中吗?耦合是指电容串联在电路中吗? 3、0.1UF的电容(并...
  • cfxzy
  • cfxzy
  • 2014年12月04日 15:40
  • 698

浅谈对于作用域的理解

最经在学一个工作流框架JBMP的时候,又
  • u010930968
  • u010930968
  • 2014年07月22日 16:29
  • 966

JavaScript中的作用域以及this变量

今天我想简单讨论下关于Javascript的作用域和this变量。“作用域”的概念就是说,我们的代码能够从哪里去访问某些函数或者变量,也就是它们所存在的上下文,或者说就是它们被执行的地方。第一种作用域...
  • zlxadhkust
  • zlxadhkust
  • 2014年04月26日 11:05
  • 1012

C++学习笔记(初级篇)——作用域与“extern”关键字

作用域,顾名思义,就是指某个标识符在程序中的有效区域。 在C++中,按作用域的大小,一般可分为局部作用域和全局作用域。 1.局部作用域 局部作用域用大括号,即{},来定义,大括号括起来的范围就是一个局...
  • Dr_Neo
  • Dr_Neo
  • 2015年12月11日 19:17
  • 1101

C++中的::的作用

(1)作用域限定符,当在类体中直接定义函数时,不需要在函数名字的前面加上类名,但是在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。Student::Display(); (2)...
  • zhanghuaichao
  • zhanghuaichao
  • 2017年02月18日 21:44
  • 2242

深入理解Angular作用域

在AngularJS中,子作用域通常会原型继承于其父作用域。有一个例外是当指令使用scope: { ... }来定义--这创建了一个没有原型继承的“独立“作用域,这会在创建“可重复使用的组件“的指令时...
  • fangjuanyuyue
  • fangjuanyuyue
  • 2016年02月23日 16:09
  • 2194

JavaScript关于作用域、作用域链和闭包的理解

作用域先来谈谈变量的作用域 变量的作用域无非就是两种:全局变量和局部变量。 全局作用域: 最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的: var oute...
  • whd526
  • whd526
  • 2017年04月29日 22:04
  • 571
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:<crtdbg.h> 的作用
举报原因:
原因补充:

(最多只允许输入30个字)