2015-10-03 2 views
0
I am using valgrind for the first time in linux 

Когда я запускаю свой исполняемый файл, я получаю следующее сообщение.MemoryLeak Valgrind

 ==31440== 
     ==31440== FILE DESCRIPTORS: 3 open at exit. 
     ==31440== Open file descriptor 2: /dev/pts/9 
     ==31440== <inherited from parent> 
     ==31440== 
     ==31440== Open file descriptor 1: /dev/pts/9 
     ==31440== <inherited from parent> 
     ==31440== 
     ==31440== Open file descriptor 0: /dev/pts/9 
     ==31440== <inherited from parent> 
     ==31440== 
     ==31440== 
     ==31440== HEAP SUMMARY: 
     ==31440==  in use at exit: 72,704 bytes in 1 blocks 
     ==31440== total heap usage: 40 allocs, 39 frees, 91,192 bytes allocated 
     ==31440== 
     ==31440== 72,704 bytes in 1 blocks are still reachable in loss record 1 of  1 
     ==31440== at 0x4C277AB: malloc (in  
    /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) 
    ==31440== by 0x4EC3AAF: _GLOBAL__sub_I_eh_alloc.cc (eh_alloc.cc:117) 
    ==31440== by 0x400E859: call_init.part.0 (in /lib64/ld-2.18.so) 
    ==31440== by 0x400E942: _dl_init (in /lib64/ld-2.18.so) 
    ==31440== by 0x40011C9: ??? (in /lib64/ld-2.18.so) 
    ==31440== 
    ==31440== LEAK SUMMARY: 
    ==31440== definitely lost: 0 bytes in 0 blocks 
    ==31440== indirectly lost: 0 bytes in 0 blocks 
     ==31440==  possibly lost: 0 bytes in 0 blocks 
     ==31440== still reachable: 72,704 bytes in 1 blocks 
     ==31440==   suppressed: 0 bytes in 0 blocks 
     ==31440== 
     ==31440== For counts of detected and suppressed errors, rerun with: -v 
     ==31440== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2) 

Означает ли это, что у меня есть утечка памяти? Как узнать, есть ли утечка памяти. Может ли кто-нибудь из вас предложить мне ссылки о том, как использовать valgrind и интерпретировать ошибки. Заранее спасибо .

+0

Это выглядит слишком много испытаний отношений, которые должны быть уже знают. Список следует считать пустым или правильно отсортированным до начала. Если вам нужен специальный случай для первого узла, сделайте это до цикла, а не внутри него. Я всегда использую указатель на указатель, чтобы избежать специальной оболочки головки, и, таким образом, избегая специальной оболочки первого узла. – JSF

+0

Возможный дубликат [Расшифровка вывода из valgrind] (http://stackoverflow.com/questions/31248805/decoding-output-from-valgrind) – gavv

ответ

0

Если ваша программа имеет утечку памяти, она будет указывать в LEAK SUMMARY, сколько строк имеет утечку памяти.

definitely lost: x bytes in 0 blocks 
indirectly lost: y bytes in 0 blocks 

Вы можете запустить быстрый тест, создав «класса Obj = новый класс()», не удаляя OBJ, вы, безусловно, создать утечку памяти в вашем проекте.

1

Во-первых, если у вас есть утечка, например, в C, это означает, что вы делаете malloc, но вы не освобождаете его. используйте man malloc и man free для получения более подробной информации.

Я могу дать вам совет при запуске Valgrind вы можете использовать аргумент --leak-check=full, и он покажет вам, какой malloc вы не освободили.

Например:

$>valgrind --leak-check=full ./foo. 
Смежные вопросы