我编写了这段代码来在 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);
}
这很好用,除了当我不断运行程序并绘制更多位图时,程序非常迅速(线性地)开始咀嚼我的可用内存:
显然,快速下降是我关闭程序。
但是当我尝试删除一些对象以试图阻止内存泄漏时,我的程序崩溃了。
例如:如果我这样做
delete hBmp;
我得到错误:
或者如果我删除 pOldbmp,我会收到错误消息:
如果我在循环之外声明这些对象并继续重用它们,我会得到致命的中止错误:
这是怎么回事??
为什么我不能删除这些对象?