2011-02-07 4 views
2

Можно создать дубликат:
Why does valgrind say basic SDL program is leaking memory?СВД Утечки памяти обнаружены с помощью Valgrind

Таким образом, я использую 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 так же (incase that is issue?):

valgrind ./main 

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

+0

ли ваше использование памяти постоянно поднимается, или же это просто отчет unfreed памяти после выхода? –

+0

В этом примере я имею в виду только последний. Сообщение о незакрепленной памяти после выхода. Что в другой ситуации может быть утечкой памяти. – dcousens

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^