C ++ Win32 Gdiplus程序崩溃尝试删除Gdiplus :: Bitmap

时间:2016-01-03 22:51:06

标签: c++ gdi+

基本上,我试图找出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);
}

崩溃,我的意思是,程序挂起并且无法启动。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

嗯,你的测试是错误的方式 - 你只是删除它是否为空。在任何情况下,delete空指针都是完全安全的;它没有任何效果,所以如果没有条件,你会好得多。

但是,无论如何,没有好的C ++代码可以做出明确的delete;我们有智能指针为我们这样做。

您的崩溃是因为您在其他地方损坏了内存 - 我认为过于明确newdelete

答案 1 :(得分:0)

您使用的是非初始化变量。

将其更改为

Gdiplus::Bitmap* last_frame_bmp = nullptr;

它会起作用。

BTW:你打电话给GdiplusStartup来初始化GDI +吗?你必须。

答案 2 :(得分:0)

解决方案是在类的构造函数中设置Gdiplus::last_frame_bmp = NULL。它现在按预期工作。