关于系统资源内存泄露的一些疑问(GDI的对象的正确使用方法)

mudunke775 2011-08-22 04:22:24
加精
今天想弄清楚关于GDI的对象的正确使用方法,CBITMAP,CBRUSH等,在一个网站看了些内容,但是有些不明白的地方,希望高手给解答下。原文:http://dev.21tx.com/2004/02/14/16733_1.html
void CMyView::OnPaint( CDC* pDC )
{
CBitmap bmp;
CBitmap* pOldBmp;
bmp.LoadBitmap(IDB_MYBMP);
pOldBmp = pDC->SelectObject( &bmp );

if( Something() ){
return;
}
pDC->SelectObject( pOldBmp );
return;
}

原文说这样会导致内存泄露,原因是pOldBmp没有选回来,也没有释放。又说长时间运行,会导致整个系统花屏。
我想弄明白的是pDC->SelectObject( &bmp );究竟是复制了一份呢,还是使用那个指针。
如果是复制,那么最后调用pDC->SelectObject( pOldBmp );同样会造成内存泄露,
如果是使用指针,那么函数执行完的时候BMP就释放了,那还能正常显示图片吗?还有,就算是泄露,我认为也只泄露了一次,也就是第一次的那个pOldBmp没有释放,后面再调用pOldBmp = pDC->SelectObject( &bmp );我认为pOldBmp = NULL;因为上次的BMP已经被释放过了,那么又怎么会导致网上说的“长时间运行,会导致整个系统花屏”?

希望高手给予解答,谢谢
...全文
1415 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
aliyeye1 2011-08-28
  • 打赏
  • 举报
回复
高深莫测啊
wuguoxin886 2011-08-28
  • 打赏
  • 举报
回复
不错不错
yjcqbbs 2011-08-27
  • 打赏
  • 举报
回复
好东西~~~
aierda 2011-08-27
  • 打赏
  • 举报
回复
支持一下,Mark
qq237177277 2011-08-26
  • 打赏
  • 举报
回复
学习了
hping1016 2011-08-26
  • 打赏
  • 举报
回复
支持一下,Mark
ArtStealer 2011-08-25
  • 打赏
  • 举报
回复
路过,顶起
lmh7758521 2011-08-24
  • 打赏
  • 举报
回复
将大家的话综合一下 研究研究去
cocoabird 2011-08-24
  • 打赏
  • 举报
回复
顶!!!!学习
足球中国 2011-08-24
  • 打赏
  • 举报
回复
吓了一身冷汗,
如履薄冰。
赵4老师 2011-08-24
  • 打赏
  • 举报
回复
纠正上帖:
任务管理器 进程 查看 选择列 GDI对象

赵4老师 2011-08-24
  • 打赏
  • 举报
回复
检查是否GDI资源泄漏的办法之一:
任务管理器 进程 查看 选择列 GDI资源
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上数值,再隔至少一小时,越长越好,比如一个月,再记录以上数值。如果以上两数值的差较大或随时间流逝不断增加,则铁定有GDI资源泄漏!
melos 2011-08-24
  • 打赏
  • 举报
回复
每天回帖加10分
huangzongda 2011-08-24
  • 打赏
  • 举报
回复
ding a ge
zhan7505201 2011-08-24
  • 打赏
  • 举报
回复
学习。
「已注销」 2011-08-24
  • 打赏
  • 举报
回复

... 顶顶~

Frog1228 2011-08-24
  • 打赏
  • 举报
回复
先留个标记,明天来看。
xy03061009 2011-08-24
  • 打赏
  • 举报
回复
我顶...
mudunke775 2011-08-24
  • 打赏
  • 举报
回复
没人关注啊,我结贴吧
nephe2008 2011-08-23
  • 打赏
  • 举报
回复
学习一下!!
加载更多回复(35)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧