MFCプログラム(Visual Studio2010の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を削除すると、次のエラーが発生します。
これらのオブジェクトをループの外で宣言し、それらを再利用し続けると、致命的な中止エラーが発生します。
どうしたんだ??
これらのオブジェクトを削除できないのはなぜですか?