目前位置: VCer资源中心 >>> VCer知道

[本帖已阅读1731次 分值0 回复0次] 张贴资源 发回信箱 控制面板

]EVC画图内存泄露问题 (转载)

提供者:lucy 张贴时间:2007-03-13 14:23:39.0 出处:newsmth.net 作者:不祥

]EVC画图内存泄露问题 (转载)(2007-03-13 14:23:39.0)


lucy


 
级别: VCer小兵
头衔: VCer会员

经验: 10
作品: 92
分会: 华北分会
注册: 2007-03-09 10:35:00.0
登录: 2007-05-31 14:40:23.0

标  题: [合集] [紧急求助]EVC画图内存泄露问题 (转载)

发信站: 水木社区 (Thu Nov 30 12:50:05 2006), 站内

☆─────────────────────────────────────☆ 

  fbicn (L?伯恩斯坦) 于  (Mon Nov 27 09:17:54 2006)  提到:

发信人: fbicn (L?伯恩斯坦), 信区: Embedded

标  题: [紧急求助]EVC画图内存泄露问题

发信站: 水木社区 (Mon Nov 27 09:16:51 2006), 站内

画图是先画在内存里,然后copy出来。在OnTimer中调用如下代码:

        CDC *pRealDC=GetDC();

        CDC mdc;

        CDC *pDC = &mdc;

        mdc.CreateCompatibleDC(pRealDC);

        CBitmap bmp;

        bmp.CreateCompatibleBitmap(pRealDC,640,480);

        CBitmap *poldbmp = mdc.SelectObject(&bmp);

        mdc.SetBkColor(RGB(0,0,0));

        mdc.SetBkMode(TRANSPARENT);

        mdc.FillSolidRect(0,0,640,480,RGB(0,0,0));

        //调用画图函数

        MyPaint(pDC);

        pRealDC->BitBlt(0,0,640,480,pDC,0,0,SRCCOPY);

        mdc.SelectObject(poldbmp);

        poldbmp->DeleteObject();

        bmp.DeleteObject();

        ReleaseDC(pDC);

        mdc.DeleteDC();

        ReleaseDC(pRealDC);

最后申请的DC和位图都释放了,但内存还是缓慢地减少。

如果只调用这段代码1次,就没问题;但需要用OnTimer来多次调用的话,就泄露。

请高人看看问题究竟在哪

☆─────────────────────────────────────☆ 

  fbicn (L?伯恩斯坦) 于  (Mon Nov 27 10:42:22 2006)  提到:

找到原因了,原来是EVC的一个Bug!!!

症状

运行代码, 调用跟 CWnd::ReleaseDC 函数, CWnd::GetDC 函数时发生内存泄漏的 4 字节

解决方案

要避免此问题, 请不要使用 CWnd 类版本的 GetDC 方法和 ReleaseDC 方法。 使用

GetDC 函数以及 ReleaseDC 函数。

详细内容看http://support.microsoft.com/kb/819635/zh-cn

【 在 StudyLife (活到老学到老) 的大作中提到: 】                               

: EVC我不会,                                                                 

: 不过对于普通VC程序,                                                         

: debug版不停的分配释放内存的话,为了记录一些东西会使得内存缓慢减少,         

: ...................

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  N95 (做爱做的事 交配交的人) 于  (Mon Nov 27 10:47:49 2006)  提到:

怎么找到的啊?

【 在 fbicn (L?伯恩斯坦) 的大作中提到: 】                                     

: 找到原因了,原来是EVC的一个Bug!!!                                         

: 症状                                                                         

: 运行代码, 调用跟 CWnd::ReleaseDC 函数, CWnd::GetDC 函数时发生内存泄漏的 4 字

节。                                                                           

: ...................                                                         

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  fbicn (L?伯恩斯坦) 于  (Mon Nov 27 10:50:31 2006)  提到:

在msdn.microsoft.com上搜ReleaseDC找到的

【 在 N95 (做爱做的事 交配交的人) 的大作中提到: 】                             

: 怎么找到的啊?                                                               

                                                                               

                                                                               

                                                                               

                                                                               

☆─────────────────────────────────────☆ 

  N95 (做爱做的事 交配交的人) 于  (Mon Nov 27 10:55:31 2006)  提到:

赞!

【 在 fbicn (L?伯恩斯坦) 的大作中提到: 】                                     

: 在msdn.microsoft.com上搜ReleaseDC找到的   

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/1173767019656.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]
[投票结果]

A: 评分 10 0% (0 票)
B: 评分 5 0% (0 票)
C: 评分 0 0% (0 票)
D: 评分 -5 0% (0 票)
E: 评分 -10 0% (0 票)