Утечка памяти (GDI+)

191
23 сентября 2018, 05:40

Почему происходит утечка памяти?

while (true)
{
    ULONG_PTR gdiplusToken;
    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    GdiplusShutdown(gdiplusToken);
}
Answer 1

Структура gdiplusStartupInput используется инициализированная по-умолчанию, что провоцирует создание фоновых потоков, которое потом не обрабатывается. Корректная инициализация, не порождающая утечек, выглядит вот так:

for(;;)
{
    ::ULONG_PTR token{};
    ::Gdiplus::GdiplusStartupInput input{};
    input.GdiplusVersion = 1;
    input.DebugEventCallback = nullptr;
    input.SuppressBackgroundThread = TRUE;
    input.SuppressExternalCodecs = TRUE;
    if(::Gdiplus::Status::Ok == ::Gdiplus::GdiplusStartup(&token, &input, nullptr))
    {
        ::Gdiplus::GdiplusShutdown(token);
    }
}
READ ALSO
Как добавить флаг -std=c++17 или -std=gnu++17

Как добавить флаг -std=c++17 или -std=gnu++17

Пишу программу на C++ в Linux в среде NetBeansIDEХочу использовать #include <fillesystem>, чтобы ее использовать нужно добавить флаг -std=c++17 или -std=gnu++17

225
Отображение в cout уникальных рандомных чисел

Отображение в cout уникальных рандомных чисел

Пробовал отсеивать через if, но не получилосьПоможете реализовать?

196
Реализация факториала через класс [закрыт]

Реализация факториала через класс [закрыт]

Не понимаю, почему не работает - выдает ошибку

178
Code::Blocks подсветка кода в defined

Code::Blocks подсветка кода в defined

По отзывам некоторых жителей этого ресурса, установил посмотреть Code::Block

180