删除HBITMAP对象时堆损坏

时间:2013-02-07 18:33:47

标签: c++ object mfc heap

我编写了这段代码,将位图打印到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);

}

这很好用,只是当我连续运行程序并绘制更多位图时,程序非常迅速(线性)开始咀嚼我的可用内存:

memory

显然,快速下降是我关闭该计划。

但是当我尝试删除某些对象以尝试阻止内存泄漏时,我的程序崩溃了。

Ex:如果我这样做

    delete hBmp;

我收到错误:

error

或者如果我删除pOldbmp,我收到错误:

error

如果我在循环之外声明这些对象并继续重用它们,我会得到致命的中止错误:

fatal

交易是什么?

为什么我不能删除这些对象?

1 个答案:

答案 0 :(得分:4)

改为使用DeleteObject(hBmp)

这种情况正在发生,因为您在使用delete hBmp选择SelectObject()的同时尝试{{1}}。