以下代码是否有内存泄漏

xiayadong 2008-09-24 10:24:54
BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值


CRect rect;
GetClientRect(&rect);


CDC memDC;
memDC.CreateCompatibleDC (pDC);

CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp);

pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY);

memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC ();

return true;
}
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
king820802 2008-09-24
  • 打赏
  • 举报
回复
那你把这部分代码改一下

HBITMAP hBitmap = LoadImage(NULL, _T("D:\\Program Files\\Tencent\\QQ\\NewSkins\\QQ2006\\BackgroundTitleLeft.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);


最后,CloseHandle(hBitmap);一下
xiayadong 2008-09-24
  • 打赏
  • 举报
回复



可是用第一次贴出的代码:
CRect rect;
GetClientRect(&rect);


CDC memDC;
memDC.CreateCompatibleDC (pDC);

CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp);

pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY);

memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC ();

return true;

就没问题;

FireBirdCN 2008-09-24
  • 打赏
  • 举报
回复
用用BoundsChecker吧
king820802 2008-09-24
  • 打赏
  • 举报
回复
代码没问题,不是这里的问题
king820802 2008-09-24
  • 打赏
  • 举报
回复
没有泄露
xiayadong 2008-09-24
  • 打赏
  • 举报
回复

如果改成如下代码呢:



BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值


CRect rect;
GetClientRect(&rect);


CDC memDC;
memDC.CreateCompatibleDC (pDC);

CBitmap *bmp =CBitmap::FromHandle((HBITMAP) LoadImage(NULL, _T("D:\\Program Files\\Tencent\\QQ\\NewSkins\\QQ2006\\BackgroundTitleLeft.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
CBitmap *oldbmp=memDC.SelectObject (bmp);

pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY);

memDC.SelectObject (oldbmp);
bmp->DeleteObject ();
memDC.DeleteDC ();

return true;


}


怎么产生一次OnEraseBkgnd事件,内存就增加4K,是不是CBitmap对象释放的有问题啊?
Hiiishe 2008-09-24
  • 打赏
  • 举报
回复
冒得泄露
hgz25251325 2008-09-24
  • 打赏
  • 举报
回复
没有啊,
去掉
bmp.DeleteObject ();
memDC.DeleteDC ();
这二行代码也不会有内存泄漏
yueyucanyang 2008-09-24
  • 打赏
  • 举报
回复
没有泄露
bbs008 2008-09-24
  • 打赏
  • 举报
回复
美油

15,979

社区成员

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

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