单文档应用程序内存泄露问题
风海流 2010-11-04 11:45:29 我使用VS2008 在一台Win7 64bit的机器上调试一个基于MFC的单文档应用程序,代码是参考另外一个完全正常的程序的。这两个单文档应用程序都使用了一模一样的拆分框架模式。现在的问题是被参考的应用程序运行没有任何问题,正在调试的应用程序VC在每次调试时都报内存泄露。消息的部分内容如下
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {6975} normal block at 0x02508B78, 28 bytes long.
。。。。。。
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\oleinit.cpp(84) : {1263} client block at 0x024DF9A0, subtype c0, 68 bytes long.
a CCmdTarget object at $024DF9A0, 68 bytes long
。。。。。
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1274} normal block at 0x024DFD80, 124 bytes long.
Data: < M > 00 00 00 00 00 00 00 00 00 00 00 00 E8 FB 4D 02
{1273} client block at 0x024DFD20, subtype c0, 32 bytes long.
a CDocManager object at $024DFD20, 32 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {1272} normal block at 0x024DFC90, 81 bytes long.
Data: <d A`@ @ > 64 99 41 60 40 00 00 00 40 00 00 00 01 00 00 00
.\XXXXXX.cpp(77) : {1271} client block at 0x024DFBE8, subtype c0, 108 bytes long.
a CSingleDocTemplate object at $024DFBE8, 108 bytes long
。。。
以上的内存泄露位置MFC明确指向了一个位置
.\XXXXXX.cpp(77)
XXXXXX是这个应用程序的名字,是App类的文件,第77行是进行单文档模板创建的语句,如下
(76) CSingleDocTemplate* pDocTemplate;
(77) pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CVirtualLabDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CVirtualLabView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
我对比了这两个应用程序的源代码,在App,Doc和View类中的实现都是一致的,不知道为什么会出现内存泄露的问题。两个程序的App类和Doc类一模一样,在View类中,新的应用程序创建了一些其他类(自己写的)的对象,做了一些操作,在发现了这个问题之后我把View类中创建对象或者分配内存的代码都注释掉了,但是还是出现内存泄露的报告。同时值得注意的是报告内存泄露的对象都是Windows的类对象,都是MFC管理的,我没有主动地书写代码创建它们。有谁知道这个泄露是为什么吗?