C++头文件crtdbg.h详解

c/c++ 同时被 2 个专栏收录
6 篇文章 0 订阅
2 篇文章 0 订阅

C++头文件crtdbg.h详解

 

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 CDCD 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代码处,然后只要通过查看调用堆栈就可以轻松看到之前的泄露的代码了

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值