1、在调试状态下让win程在输出窗口中显示调试信息,可以用_RPTn宏n为显示参数比如_RPT0(_CRT_WARN,"text");
_RPT1(_CRT_WARN,"%d", iTest); _RPT2(_CRT_WARN,"%d,%f", iTest,fTest);....依次类推,详细见msdn
2、侦测内存泄露用_CrtSetDbgFlag函数
产生的信息类似:
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.
#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代码处,然后只要通过查看调用堆栈就可以轻松看到之前的泄露的代码了