События SDL Утечка памяти

#c #events #memory #sdl #memory-leaks

#c #Мероприятия #память #sdl #утечки памяти

Вопрос:

Существуют ли какие-либо известные методы или функции в SDL, которые, как известно, вызывают утечки памяти?

Я заметил для своей программы, что при включении .1 МБ памяти продолжал привязываться к использованию памяти программой (т. Е. дополнительные ‘.4 МБ’ были добавлены ровно за 3 минуты).

Я закомментировал все свои функции рисования на поверхности; в значительной степени просто изолировал основной игровой цикл от структуры событий и перелистывания экрана, например:

 // .. Intilize
char quit = 0;
Uint8* keystate = NULL;
SDL_Event hEvent;
while (!quit) 
{
    // .. Code

    while (SDL_PollEvents(amp;hVvent)) {
        keystate = SDL_GetKeystate(NULL);
        // .. Event processing
    }

    // .. More Code

    if (SDL_Flip(screen) == -1)
        return 1

    SDL_Delay(1);
}   
// .. Cleanup
  

Комментарии:

1. Я не знаю ни о какой утечке в SDL. Скорее всего, это в вашем коде. Вы должны продолжать удалять свою программу, пока утечка не исчезнет, или вы можете опубликовать весь код утечки в вопросе.

Ответ №1:

Мой любимый инструмент для проверки утечек памяти — Valgrind. После компиляции вашего кода просто запустите следующую команду:

 valgrind --leak-check=full --show-reachable=yes ./executable
  

После завершения проверьте выходные данные на наличие информации об утечке памяти.
Инструмент может быть более подробным, путем выдачи флага -v

Ответ №2:

 valgrind --track-origins=yes --leak-check=full --show-reachable=yes ./executable