标 题: [合集] [紧急求助]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找到的