最近碰到的问题,在定时器中重绘图像发现了内存泄露稳定,反复测试发现是调用了GetDC函数导致的。我用的是visual studio 2010。上网一搜果然发现了问题。

http://blog.csdn.net/onlyou930/article/details/5902670

BUG: GetDC() ReleaseDC()引起的内存泄漏

今天同事在一个定时器中画图,结果发现内存缓慢增长,怀疑是内存泄漏,查了很久,该释放的GDI资源都释放了的啊,可是还是无法解决,最后把GetDC()放在初始化里面,退出时调用ReleaseDC(),中间处理部分直接使用pDC,内存倒是不增长了,可是一直心里觉得奇怪,又仔细查了下,原来这是MFC的一个BUG.每次调用有4字节的内存泄漏,具体可见下面链接:
http://support.microsoft.com/kb/819635/zh-cn

Steps to Reproduce the Behavior

In a method that is a part of a class that is derived from CWnd, insert the following code in your application:

CDC *pDC;RECT rect;GetClientRect (&rect);for (int i = 0; i < 1000; i++){pDC = GetDC ();ReleaseDC (pDC);}

If you run this code and then check the system memory before and after you run the code, you notice that the system memory leaks four bytes per iteration. If you change the code to the following code, the memory leak does not occur:

HDC hDC;RECT rect;::GetClientRect (m_hWnd, &rect);for (int i = 0; i < 1000; i++){hDC = ::GetDC (m_hWnd);::DrawText (hDC, L"Testing...", 10, &rect, DT_CENTER);::ReleaseDC (m_hWnd, hDC);}

GetDC()内存泄露相关推荐

  1. MFC窗口的GetDC()/ReleaseDC()有bug会造成内存泄露

    MFC窗口的GetDC()/ReleaseDC()有bug会造成内存泄露,解决办法:使用win32的对应接口::GetDC()/::ReleaseDC().

  2. Android中出现内存泄露的原因

    短生命周期的对象持有了长生命周期的对象,使得短生命周期对象驻留内存,消耗内存,因为无法让垃圾回收器GC验证这些对象是否不再被使用,无法释放这些内存. 以下会造成内存泄露: a.数据库的cursor没有 ...

  3. Linux下正确使用getifaddrs()函数避免内存泄露

    工作中使用valgrind检测内存泄露时,发现getifaddrs()很容易导致内存泄露,下面是正确的代码: //get local ip of network card //gcc -g get_a ...

  4. 使用valgrind检测ATS插件中的内存泄露

    一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库 ...

  5. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露

    valgrind官网:http://valgrind.org/ 1.安装方法 第一种方式:下载目前最新的源码,编译安装,在服务器上推荐这种方式 wget http://valgrind.org/dow ...

  6. ATS插件开发中内存泄露问题的解决方法探讨

    接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...

  7. 通过define _CRTDBG_MAP_ALLOC宏来检测windows上的code是否有内存泄露

    VS中自带了内存泄露检测工具,若要启用内存泄露检测,则在程序中包括以下语句: #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> 它们的先后顺序不能 ...

  8. Ubuntu下内存泄露检测工具Valgrind的使用

    在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...

  9. OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)

    转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若 ...

最新文章

  1. component映射
  2. MySQL5.6 Performance_schema
  3. 膨胀的JavaBeans –不要在您的API中添加“ Getters”
  4. Linux的标准I/O和管道
  5. Vue入门 ---- vue-loader 、vue-cli
  6. Mr.J-- jQuery学习笔记(十)--trigger方法详解
  7. 36幅非常漂亮的阳光摄影作品欣赏
  8. Python: 分数运算
  9. Unity中Lua造成的堆内存泄露问题
  10. 计算机基础知识测试试题及答案,计算机基础知识测试试题及答案
  11. 樊登读书搞定读后感_樊登读书人生定位读后感
  12. 【日语】动词的九种变形
  13. 微型6轴惯性导航姿态传感器(IMU)LPMS-BE2 OEM
  14. Laravel企业信息化管理平台
  15. spring mvc使用@InitBinder 标签对表单数据绑定
  16. idea的debug功能详解
  17. 信息竞赛中的INF的含义
  18. 腾讯云 云点播 JAVASDK上传
  19. Nginx教程 安装
  20. win7无法保存打印机设置(错误0x000006d9)解决方法

热门文章

  1. 软件程序员成功的秘诀
  2. linux中gnuplot给定文本,gnuplot笔记(四)
  3. 手机动画 无线增值业务的潜力股
  4. 【GO】详解GOROOT和GOPATH
  5. 能帮我们学习吉他的音乐软件——Guitar Pro
  6. 软件测试报告技术文档
  7. 涉及国家秘密的计算机系统集成,深圳哪些企业有涉及国家秘密的计算机信息系统集成资质证书?...
  8. GoTo Group上市首日市值达315亿美元;星巴克推出“明日的拿铁”创意饮食;华住出台“专项融资扶持计划” | 美通企业日报...
  9. 香港云服务器及云计算中的虚拟化
  10. 通信是个大问题,还好我们有方法。