[英]MFC HBITMAP memory leak does not go away
每当执行以下代码时,我在应用程序任务管理器中的内存就会不断增加。 我在stackoverflow上发现了类似的问题,并且像他们所说的那样进行了一些DeleteObject调用,但是当执行此代码时,这仍然无法解决不断增加的内存问题。
如何解决呢? 我究竟做错了什么?
SetControlPicture(const UINT ID_PICTURE_CONTROL)
{
CImage image;
CBitmap bitmap;
HRESULT hresult;
CStatic* pItem = (CStatic*)GetDlgItem(ID_PICTURE_CONTROL);
hresult = image.Load(_T("./Data/Images/RED_ON.png"));
if(hresult != E_FAIL)
{
HBITMAP hBitMap = image.Detach();
bitmap.Attach(hBitMap);
HBITMAP hBitMapPrev = pItem->SetBitmap(bitmap);
if (hBitMapPrev)
{
DeleteObject(hBitMapPrev); // *** do not forget to delete the previously associated bitmap
}
DeleteObject(hBitMap);
}
}
AFAIK根据文档,这必须泄漏。 自通用控制版本。 6.0您可以删除位图。 删除返回的位图是不够的。
http://msdn.microsoft.com/zh-CN/library/windows/desktop/bb760782(v=vs.85).aspx
在Microsoft Win32控件的版本6中,使用STM_SETIMAGE消息传递给静态控件的位图与后续STM_SETIMAGE消息返回的位图相同。 客户端负责删除发送到静态控件的任何位图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.