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