单文档应用程序内存泄露问题
我使用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管理的,我没有主动地书写代码创建它们。有谁知道这个泄露是为什么吗?
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管理的,我没有主动地书写代码创建它们。有谁知道这个泄露是为什么吗?
...全文
相关推荐
MFC单文档应用程序实例
MFC 单文档应用程序实例MFC 单文档应用程序实例是使用 MFC 框架创建的一个简单的文档应用程序,它可以帮助开发者快速创建一个单文档应用程序。
mfc单文档应用程序实现了formview界面切换和dialog布局
MFC是微软提供的一个C++类库,它为Windows应用程序开发提供了丰富的接口,极大地简化了Windows API的使用。首先,让我们来了解**单文档应用程序(SDI)**。
MFC应用程序建立单文档程序能在里面调用对话框
2.1 建立单文档应用程序建立单文档应用程序需要使用MFC应用程序框架。
基于MFC开发的基于单文档画图应用程序
该项目是一个基于MFC框架开发的单文档画图应用程序,支持绘制圆形、正方形等图形,并提供颜色选择与参数设置功能。通过对话框获取用户输入,结合GDI绘图技术实现基本图形绘制,具备良好的界面交互性和扩展性。
Tomcat内存泄露问题排查
### Tomcat内存泄露问题排查#### 测试环境与问题描述- **测试环境**:天津中石油现场。


