【发布时间】:2013-01-23 09:13:21
【问题描述】:
我编写了这段代码来在 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,我会收到错误:
如果我在循环之外声明这些对象并继续重复使用它们,我会收到致命的中止错误:
怎么了??
为什么我不能删除这些对象?
【问题讨论】:
-
不要
delete hBmp- 你不是从new那里得到的吗?请改用DeleteOBject(hBmp)。
标签: c++ object mfc heap-corruption