MFC内存泄漏的问题的其中一种情况
2012-10-16 21:37
225 查看
今天在编写程序的时候发现程序运行之后占用内存不断的增加,从2M到4M,程序自动中止了;
后来经过一番努力,其实是很简单的问题
MFC中我的OnDraw函数
内存泄漏的原因首先我是从OnTimer中发现的,因为函数中用了Invalidate(FALSE);
所以就会不断的调用OnDraw,问题就在OnDraw里面,其实在DrawGame函数前面的都只需要用一次就可以了,所以反复调用就会出现内存泄漏,详细的原因我也不懂,我就加入了一个布尔型的变量控制前面的一段只在程序一开始的时候运行,之后再调用OnDraw也不会再运行就解决这个问题了,我顺便还把m_memDC和m_memBmp放到头文件里面,最后代码如下
这样内存泄漏的问题就解决了,在我上网查询的过程中我发现很多内存泄漏的情况都是在绘图上资源没有释放或者反复使用所导致的,以后编程过程中要注意内存使用的变化情况或者用软件检测是否有内存泄漏的问题并解决。
后来经过一番努力,其实是很简单的问题
MFC中我的OnDraw函数
void CBallView::OnDraw(CDC* pDC) { CDC *pWindowDC = GetDC(); CDC m_memDC; CBitmap m_memBmp; //1.用于映射屏幕的内存设备环境 //获取游戏窗口的大小用于下面设置内存位图的尺寸 CRect windowRect; GetClientRect(&windowRect); m_nWidth = windowRect.Width(); m_nHeight = windowRect.Height(); //内存设备环境与屏幕设备环境关联(兼容) m_memDC.CreateCompatibleDC(pWindowDC); //内存位图与与屏幕关联(兼容),大小为游戏窗口的尺寸 m_memBmp.CreateCompatibleBitmap(pWindowDC,m_nWidth,m_nHeight); //内存设备环境与内存位图关联,以便通过m_memDC在内存位图上作画 m_memDC.SelectObject(&m_memBmp); // TODO: add draw code for native data here m_pWhitePen = new CPen(PS_SOLID,1,RGB(255,255,255)); //画刷 m_pBlackBrush = new CBrush(RGB(0,0,0)); DrawGame(&m_memDC); pDC->BitBlt(0,0,m_nWidth,m_nHeight,&m_memDC,0,0,SRCCOPY); }
内存泄漏的原因首先我是从OnTimer中发现的,因为函数中用了Invalidate(FALSE);
所以就会不断的调用OnDraw,问题就在OnDraw里面,其实在DrawGame函数前面的都只需要用一次就可以了,所以反复调用就会出现内存泄漏,详细的原因我也不懂,我就加入了一个布尔型的变量控制前面的一段只在程序一开始的时候运行,之后再调用OnDraw也不会再运行就解决这个问题了,我顺便还把m_memDC和m_memBmp放到头文件里面,最后代码如下
void CBallView::OnDraw(CDC* pDC) {if(m_bFistPlay) { m_bFistPlay=false; CDC *pWindowDC = GetDC(); //1.用于映射屏幕的内存设备环境 //获取游戏窗口的大小用于下面设置内存位图的尺寸 CRect windowRect; GetClientRect(&windowRect); m_nWidth = windowRect.Width(); m_nHeight = windowRect.Height(); //内存设备环境与屏幕设备环境关联(兼容) m_memDC.CreateCompatibleDC(pWindowDC); //内存位图与与屏幕关联(兼容),大小为游戏窗口的尺寸 m_memBmp.CreateCompatibleBitmap(pWindowDC,m_nWidth,m_nHeight); //内存设备环境与内存位图关联,以便通过m_memDC在内存位图上作画 m_memDC.SelectObject(&m_memBmp); // TODO: add draw code for native data here m_pWhitePen = new CPen(PS_SOLID,1,RGB(255,255,255)); //画刷 m_pBlackBrush = new CBrush(RGB(0,0,0)); } DrawGame(&m_memDC); pDC->BitBlt(0,0,m_nWidth,m_nHeight,&m_memDC,0,0,SRCCOPY); }
这样内存泄漏的问题就解决了,在我上网查询的过程中我发现很多内存泄漏的情况都是在绘图上资源没有释放或者反复使用所导致的,以后编程过程中要注意内存使用的变化情况或者用软件检测是否有内存泄漏的问题并解决。
相关文章推荐
- 处理内存泄漏的一种MFC方法
- 在静态库下使用MFC和共享DLL下使用MFC 这两种情况 opencv的配置,以及配置opencv配置中容易出现的问题
- spring初始化2次的一种情况:同一个项目在tomcat目录的webapps下保留了2份,例如其中一份作为备份。
- 处理内存泄漏的一种MFC方法
- 将n个相异的球按每小组m个球进行分组,不足m个的也算一个小组。输出所有可能的分组方式;对其中的一种分组方式,都指明每个小组包含的球的情况!
- 处理内存泄漏的一种MFC方法
- SQL安装时出错,提示:安装程序配置服务器失败 参考服务器错误日志。针对其中一种情况的解决方法!
- 关于MFC中的Debug Assertion Failed问题的一种可能的解决方法。
- C++类对象之间赋值产生内存泄漏的一种情况
- MFC中,编译器无法识别类等问题的另一种情况。
- Ogre与MFC结合时的内存泄漏问题
- 在datagrid的表头上的其中一个列加checkbox而导致checkbox无法选中的问题的一种解决方案
- 一种快速解决JAVA内存泄漏问题的方法
- Solaris 系统ssh 上传 断线 问题的一种情况
- 项目中遇到的小问题,position:fixed无效的一种情况
- 真正的创新必然是基于对市场的了解,对客户反馈的观察,开发出来的产品一定要适应市场,提出的模式一定要能解决现实的问题。而在这其中,技术只是一种实现手段。
- 经常遇到的一个问题是 MFC中开启多线程后 在非主线程中使用updata函数出现崩溃的情况。
- SpringMVC事务失效的一种情况-bean加载顺序问题
- 关于Ubuntu的磁盘空间不足其中的一种问题
- [置顶] Android http get请求里中文是乱码的解决(其中一种情况)