0

我编写了这段代码来在 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,我会收到错误消息:

错误

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

致命的

这是怎么回事??

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

4

1 回答 1

4

改为使用DeleteObject(hBmp)

发生这种情况是因为您在尝试delete hBmp使用SelectObject().

于 2013-02-07T18:36:38.910 回答