windows mobile下内存检测,一些工具如AppVertifyer等其实检测效果并不佳,而更多的是需要程序员在编写代码过程中注意加入检测代码, 以下这个类可以当做检测windows mobile下内存,主要是对new 、delete进行重写,然后在需要检测的文件中添加宏定义。
crtdbg.h头文件代码如下:
crtdbg.cpp代码如下:
然后在程序的main函数里添加_CrtSetDbgFlag (ON); 其实这是一个#define _CrtSetDbgFlag(ignore) /
garbageCollector gb; 这样的定义 , 在程序退出的时候会调用garbageCollector 的析构函数,crtdbg.cpp中有定义全局变量负责管理我们程序中分配的内存,这样子当garbageCollector 析构的时候会调用这些全局变量来判断new的内存是否有delete掉。
不纺做个测试:
#include "crtdbg.h"
#define new new(_T(__FILE__), __LINE__)
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
_CrtSetDbgFlag (ON);
int* p = new int;
return 0;
}
程序输出:
Detected memory leaks!
Dumping objects ->
d:/eclipse3.4.3/ce_leakdemo/crtdbg.h(95) : normal block at 0x00030060, 4 bytes long
Data <>
./test.cpp(24) : normal block at 0x00030100, 4 bytes long
Data <>
Maximum free store memory allocated at a time: 8!
我在windows mobile上调试这个类是要在项目属性的c/c++ ---》语言-->将wchar_t设置为内置类型设置为否编译才通过
一般来说
#include "crtdbg.h"
#define new new(_T(__FILE__), __LINE__) 这两行要加在所有include头文件的最后面,这样不会影响到你所包含的头文件里的new、delete的调用,但如果你乐意也可以,呵呵。