在源代码级别检测程序中的内存泄漏,在VC++ 6.0中可以通过Debug模式和CRT库来方便的检测程序中的内存泄漏,具体可以参见在线文档,文档的URL是:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvc60/html/memleaks.asp。以下是一个例子。假设有如下VC++程序:
//start
#include "stdafx.h "
void leakMemory(){
char* pChar=new char[5];
}
int main(int argc, char* argv[])
{
leakMemory();
return 0;
}
//end
该程序的leakMemory存在内存泄漏。分配给pChar指针的char[5]没有被释放。在该程序中如过需要检测leakMemory()函数的内存泄漏,可以在程序中插入一些语句使之成为以下程序:
//start
#define _CRTDBG_MAP_ALLOC
#include "stdafx.h "
#include <stdlib.h>
#include <crtdbg.h>
void leakMemory(){
char* pChar=new char[5];
}
int main(int argc, char* argv[])
{
leakMemory();
_CrtDumpMemoryLeaks();
return 0;
}
//end
此时,在VC++ 6.0中按F5开始Debug,在下部调试信息框的 "Debug "标签页中将显示如下与内存泄漏有关的内容:
Detected memory leaks!
Dumping objects ->
{44} normal block at 0x00431BB0, 5 bytes long.
Data: < > CD CD CD CD CD
Object dump complete.
The thread 0xCA8 has exited with code 0 (0x0).
通过这些信息,程序员可以有效的对内存泄漏进行检测。CRT库还有复杂的使用方法和更强大的功能。具体文档可以查看MSDN,或者阅读在线帮助文档。