我编写了这段代码,将位图打印到MFC程序中的对话框(Visual Studio 2010中的C ++):
//Loop start
{
//...
//some prep stuff
//...
HBITMAP hBmp = myObv->GetBMP();
CBitmap bmp;
bmp.Attach(hBmp);
CClientDC dc(this);
CDC bmDC;
bmDC.CreateCompatibleDC(&dc);
CBitmap *pOldbmp = bmDC.SelectObject(&bmp);
BITMAP bi;
bmp.GetBitmap(&bi);
dc.BitBlt(384,26,bi.bmWidth/3,bi.bmHeight,&bmDC,0,0,SRCCOPY);
bmDC.SelectObject(pOldbmp);
}
这很好用,只是当我连续运行程序并绘制更多位图时,程序非常迅速(线性)开始咀嚼我的可用内存:
显然,快速下降是我关闭该计划。
但是当我尝试删除某些对象以尝试阻止内存泄漏时,我的程序崩溃了。
Ex:如果我这样做
delete hBmp;
我收到错误:
或者如果我删除pOldbmp,我收到错误:
如果我在循环之外声明这些对象并继续重用它们,我会得到致命的中止错误:
交易是什么?
为什么我不能删除这些对象?
答案 0 :(得分:4)
改为使用DeleteObject(hBmp)
。
这种情况正在发生,因为您在使用delete hBmp
选择SelectObject()
的同时尝试{{1}}。