#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