基本上,我试图找出Gdiplus :: Bitmap *是不是NULL(或0)。如果是这样删除它,然后创建一个“新的Gdiplus :: Bitmap()”。我试图这样做,以防止任何未来的内存泄漏。
我已经尝试了很多东西,如果我创建位图然后调用delete,它工作正常(减去空检查。)
// private
Gdiplus::Bitmap* last_frame_bmp;
// public
foo::foo() {
if (last_frame_bmp != NULL) { delete last_frame_bmp; }
last_frame_bmp = new Gdiplus::Bitmap(100, 100, PixelFormat32bppPARGB);
}
崩溃,我的意思是,程序挂起并且无法启动。
有什么想法吗?
答案 0 :(得分:2)
嗯,你的测试是错误的方式 - 你只是删除它是否为空。在任何情况下,delete
空指针都是完全安全的;它没有任何效果,所以如果没有条件,你会好得多。
但是,无论如何,没有好的C ++代码可以做出明确的delete
;我们有智能指针为我们这样做。
您的崩溃是因为您在其他地方损坏了内存 - 我认为过于明确new
和delete
。
答案 1 :(得分:0)
您使用的是非初始化变量。
将其更改为
Gdiplus::Bitmap* last_frame_bmp = nullptr;
它会起作用。
BTW:你打电话给GdiplusStartup来初始化GDI +吗?你必须。
答案 2 :(得分:0)
解决方案是在类的构造函数中设置Gdiplus::last_frame_bmp = NULL
。它现在按预期工作。