C++ 删除HBITMAP对象时堆损坏

C++ 删除HBITMAP对象时堆损坏,c++,object,mfc,heap,C++,Object,Mfc,Heap,我编写这段代码是为了在MFC程序(Visual Studio 2010中的C++)中将位图打印到对话框中: 这很好,只是随着我不断运行程序和绘制更多位图,程序很快(linerally)开始消耗我的可用内存: 很明显,快速下降是我关闭了程序 但当我试图删除一些对象以阻止内存泄漏时,我的程序崩溃。 如果我这样做了 delete hBmp; 我得到一个错误: 或者,如果删除pOldbmp,则会出现以下错误: 如果我在循环之外声明这些对象并继续重用它们,我会得到致命的中止错误: 怎么回

我编写这段代码是为了在MFC程序(Visual Studio 2010中的C++)中将位图打印到对话框中:

这很好,只是随着我不断运行程序和绘制更多位图,程序很快(linerally)开始消耗我的可用内存:

很明显,快速下降是我关闭了程序

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

如果我这样做了

    delete hBmp;
我得到一个错误:

或者,如果删除pOldbmp,则会出现以下错误:

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

怎么回事

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

使用
删除对象(hBmp)

之所以发生这种情况,是因为您试图
删除hBmp
,但仍然使用
SelectObject()
选择它

改用
删除对象(hBmp)


之所以发生这种情况,是因为您试图
删除hBmp
,但仍然使用
SelectObject()
选择它

不要
删除hBmp
-您没有从
新建
中获得它,是吗?改为使用
DeleteOBject(hBmp)
。不要
delete hBmp
-您不是从
new
获得它的,是吗?改用
DeleteOBject(hBmp)
。这适用于除位图bi之外的所有对象。是否有其他方法删除该对象?
bi
是堆栈对象,当函数返回时,它将自动删除@Xcdemon05这可能是内存泄漏的根源,因为这一切都发生在一个无限循环中?这是否意味着它永远不会被删除?等等,不,当循环完成时,堆栈对象
位图bi
仍会被删除。因此,为了澄清,每次循环都会删除bi?这对除位图bi之外的所有对象都有效。是否有其他方法删除该对象?
bi
是堆栈对象,当函数返回时,它将自动删除@Xcdemon05这可能是内存泄漏的根源,因为这一切都发生在一个无限循环中?这是否意味着它永远不会被删除?等等,不,当循环结束时,堆栈对象
位图bi
仍会被删除。因此,为了澄清问题,每次运行循环都会删除bi?
    delete hBmp;