Утечки памяти SDL обнаружены с помощью Valgrind

Возможный дубликат:
Почему valgrind сообщает об утечке памяти в базовой программе SDL?

Поэтому я много использовал SDL при создании небольшого приложения OpenGL; Недавно мне стало интересно проверить, как работает моя память (я позаботился о том, чтобы не было утечек памяти и т. д.). Но потом я создал драйвер SDL в своей программе, и все пошло под откос. Я изолировал код и понятия не имею, делаю ли я что-то не так, если это SDL или, возможно, SDL использует библиотеку (см. результаты Valgrind).

#include <SDL.h>

int main() {
    SDL_Surface* Screen;
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
        return 1;
    }
    Screen = SDL_SetVideoMode(1280, 1024, 32, SDL_OPENGL);
    SDL_FreeSurface(Screen);
    SDL_Quit();
    return 0;
}

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

if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    return 1;
}

==7485== LEAK SUMMARY:
==7485==    definitely lost: 16 bytes in 1 blocks
==7485==    indirectly lost: 176 bytes in 4 blocks
==7485==      possibly lost: 9,155 bytes in 14 blocks
==7485==    still reachable: 654,484 bytes in 1,484 blocks

Примечание. Использование SDL_Quit() после приведенного выше кода вызывает дальнейшие утечки памяти, так что это не решение (к сожалению). Теперь для всей программы (как опубликован исходный источник) (первая ошибка повторяется несколько раз, прежде чем отображается ниже):

==7515== Invalid write of size 1
==7515==    at 0x4C29910: memcpy (mc_replace_strmem.c:497)
==7515==    by 0xB9BE0CF: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so)
==7515==  Address 0x7f42bca30fff is not stack'd, malloc'd or (recently) free'd
==7515== 
==7515== More than 10000000 total errors detected.  I'm not reporting any more.
==7515== Final error counts will be inaccurate.  Go fix your program!
==7515== Rerun with --error-limit=no to disable this cutoff.  Note
==7515== that errors may occur in your program without prior warning from
==7515== Valgrind, because errors are no longer being displayed.
==7515== 
==7515== HEAP SUMMARY:
==7515==     in use at exit: 4,539,966 bytes in 11,312 blocks
==7515==   total heap usage: 49,855 allocs, 38,543 frees, 40,485,815 bytes allocated
==7515== 
==7515== LEAK SUMMARY:
==7515==    definitely lost: 79,981 bytes in 126 blocks
==7515==    indirectly lost: 30,480 bytes in 54 blocks
==7515==      possibly lost: 3,374,770 bytes in 9,289 blocks
==7515==    still reachable: 1,054,735 bytes in 1,843 blocks
==7515==         suppressed: 0 bytes in 0 blocks
==7515== Rerun with --leak-check=full to see details of leaked memory

Я использую Ubuntu 10.10, если это имеет значение.

Второе примечание; Я использую Valgrind так (если проблема в этом?):

valgrind ./main

Третье примечание; fglrx — это драйвер Ubuntu ATI.


person deceleratedcaviar    schedule 07.02.2011    source источник
comment
Используемая вами память постоянно растет, или после выхода вы просто сообщаете о незанятой памяти?   -  person Cat Plus Plus    schedule 07.02.2011
comment
В данном примере я имею в виду исключительно последнее. Сообщение о незанятой памяти после выхода. Что в другой ситуации может быть утечкой памяти.   -  person deceleratedcaviar    schedule 07.02.2011