Утечка памяти событий SDL - PullRequest
2 голосов
/ 13 ноября 2011

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

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

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

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

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

    // .. More Code

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

    SDL_Delay(1);
}   
// .. Cleanup

Ответы [ 2 ]

1 голос
/ 23 февраля 2012
valgrind --track-origins=yes --leak-check=full --show-reachable=yes ./executable
1 голос
/ 22 ноября 2011

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

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

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

...