关于在VS2008以下版本的MFC程序使用VS 2008 FeaturePack出现内存泄露的理解
2010-07-24 13:47
721 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101/
题目有点长,但是想不到更好的题目。在家编个小程序,将以前用VS 2005编的一个工程升级到VS 2008,同时使用VS 2008 Feature Pack中的新控件。
在调试程序出现内存泄露:
Detected memory leaks!
Dumping objects ->
{914} client block at 0x01481660, subtype c0, 200 bytes long.
a CMFCVisualManager object at $01481660, 200 bytes long
到网上搜索了一下,找到了答案。原因在于VS2008中MFC程序中的应用程序类都派生自CWinAppEx,VS 2008的程序里有一个CMFCVisualManager类的全局对象,负责管理可视化界面,具体来说就是一个单件(设计模式中的单件模式),CWinAppEx类的ExitInstance函数可以析构这个对象。但是以往的MFC程序的应用程序类都派生自CWinApp,因为需要在ExitInstance函数手动这个类对象,具体就是在应用程序类的ExitInstance函数添加代码:
这样就不会有内存泄露了。
来源:http://blog.csdn.net/clever101/
题目有点长,但是想不到更好的题目。在家编个小程序,将以前用VS 2005编的一个工程升级到VS 2008,同时使用VS 2008 Feature Pack中的新控件。
在调试程序出现内存泄露:
Detected memory leaks!
Dumping objects ->
{914} client block at 0x01481660, subtype c0, 200 bytes long.
a CMFCVisualManager object at $01481660, 200 bytes long
到网上搜索了一下,找到了答案。原因在于VS2008中MFC程序中的应用程序类都派生自CWinAppEx,VS 2008的程序里有一个CMFCVisualManager类的全局对象,负责管理可视化界面,具体来说就是一个单件(设计模式中的单件模式),CWinAppEx类的ExitInstance函数可以析构这个对象。但是以往的MFC程序的应用程序类都派生自CWinApp,因为需要在ExitInstance函数手动这个类对象,具体就是在应用程序类的ExitInstance函数添加代码:
CMFCVisualManager::DestroyInstance( TRUE );
这样就不会有内存泄露了。
相关文章推荐
- 关于在VS2008以下版本的MFC程序使用VS 2008 FeaturePack出现内存泄露的理解
- 在使用Vs2013打开Vs2008的解决方案时出现了以下错误:此版本的应用程序不支持其项目类型(.csproj)
- vs 2008 win32程序使用大内存 (>2GB)设置
- 关于安装IE8之后VS2008使用MFC出现问题的解决方法
- MFC和opencv一起使用时会莫名奇妙出现内存泄露问题
- VS2008编写的程序使用更低版本VS打开
- vs 2008 win32程序使用大内存 (>2GB)设置
- 关于安装IE8之后VS2008使用MFC出现问题的解决方法
- 使用OpenCv库的MFC程序在退出后报内存泄露 可能解决方法
- VS2008编写的程序使用更低版本VS打开
- vs 2008 win32程序使用大内存 (>2GB)设置
- VS使用有感——MFC程序移植至其他PC上出现的错误
- vs2008下的MFC程序,怎么检测内存泄露
- WINCE-MFC-CDC使用出现的4KB内存泄露解决办法,坑爹的MFC
- PostQuitMessage(0)要慎用,经常会造成MFC程序退出时内存泄露,还是尽量使用MFC基类的退出函数比较好。
- WINCE-MFC-CDC使用出现的4KB内存泄露解决办法,坑爹的MFC
- VS编译好的*.lib文件,在其他版本上不能使用出现以下错误
- 关于在vc6后续版本MFC程序中使用Media ActiveX组件
- 安装vs2008 sp1后程序出错--VC2008中 “Debug\Ckeshe.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 关于在vc6后续版本MFC程序中使用ActiveX组件