Нарушение прав доступа в деструкторе изображений - PullRequest
4 голосов
/ 28 июля 2010

Очень простая программа, которую я могу сказать ..

#include <windows.h>
#include <gdiplus.h>

using namespace Gdiplus;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR cmdLine, int nShow){
    // Gdiplus variables
    GdiplusStartupInput mGdiplusStartupInput;
    ULONG_PTR           mGdiplusToken;
    GdiplusStartup(&mGdiplusToken, &mGdiplusStartupInput, NULL);

    Bitmap bitmap(L"left.bmp");


    GdiplusShutdown(mGdiplusToken);
    return 0;
}

При запуске этого примера я получаю нарушение прав доступа в GdiplusBitmap.h в этой функции

inline 
Image::~Image()
{
    DllExports::GdipDisposeImage(nativeImage);
}

Удаляя вызовна Bitmap bitmap(L"left.bmp"); все работает нормально .. Я попытался найти простой пример на msdn (например, где-то рядом с растровым конструктором , но ничего не нашел.)

Что яотсутствует

1 Ответ

8 голосов
/ 28 июля 2010

Созданный вами экземпляр Bitmap выходит из области видимости ПОСЛЕ вызова выключения GDI +. Поэтому, когда Bitmap разрушается, он не может вызвать данный GdipDisposeImage метод.

Ошибка должна исчезнуть, если вы убедитесь, что bitmap удалено перед выключением GDI +.

...