VC++内存泄漏的检测与定位
本文大部分内容来自网络,只是做了适当的修改和补充,以便更贴近实际应用。
一 对于MFC程序
如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:
class CMyApp : public CWinApp
{
public:
BOOL InitApplication()
{
int* leak = new int[10];
return TRUE;
}
};
产生的内存泄漏报告大体如下:
Detected memory leaks!
Dumping objects ->
c:worktest.cpp(186) : {52} normal block at 0x003C4410, 40 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
双击“输出”窗口中,内存泄漏报告的文字"c:worktest.cpp(186) : {52} normal block at 0x003C4410, 40 bytes long.",或者
在Debug窗口中逻辑按F4(VC++6.0),IDE就帮你定位到引起内存泄漏的对应文件的对应行,也就是这一句:
int* leak = new int[10];
特别地,如果这个new仅对应一条delete(或者你把delete漏写),这将很快可以确认问题的症结。
二 对于非MFC
需要做点工作,剩下的还是由VC++的C运行库去做。也就是说,只要你是VC++程序员,都可以很方便地检测内存泄漏。我们还是给个样例:
#include "crtdbg.h"
inlin