Отчет об утечке памяти в Valgrind отличается для исполняемой библиотеки и библиотеки .so - PullRequest
2 голосов
/ 05 марта 2012

В настоящее время я управляю модулем своей лаборатории.

Я проверил наличие утечек памяти с помощью valgrind. Я нашел несколько утечек памяти и исправил их. И когда я создал файл .so для предоставления модуля в виде библиотеки и тестового кода для запуска библиотеки .so, valgrind сообщает об утечке памяти, которой не было в исходной программе.

В тестовом коде отсутствует отсутствующая функция. Я думаю, что различие опций при компиляции с g ++ вызывает эту ситуацию. Но я не смог проверить это.

Я использую опции ниже, чтобы скомпилировать оригинальный модуль

-ggdb -I. -D_DEBUG -D_CICODE -D_EDITMODE -DPOINTER -fPIC

и

-shared -W1,-soname,libmysutff.so.1

для создания .so файла.

Рабочая среда: Ubuntu 10.10, g ++

Это вывод valgrind:

==23426==
==23426== HEAP SUMMARY:
==23426==     in use at exit: 1,148 bytes in 8 blocks
==23426==   total heap usage: 4,294 allocs, 4,286 frees, 43,176,780 bytes allocated
==23426==
==23426== 300 bytes in 1 blocks are definitely lost in loss record 5 of 6
==23426==    at 0x4C2815C: malloc (vg_replace_malloc.c:236)
==23426==    by 0x400A27: main
==23426==
==23426== 848 (120 direct, 728 indirect) bytes in 1 blocks are definitely lost in loss record 6 of 6
==23426==    at 0x4C27480: calloc (vg_replace_malloc.c:467)
==23426==    by 0x4E6E6B6: NewPathNode() (mem_manager.cpp:156)
==23426==    by 0x4E61F21: Morph_No_Space(unsigned char*, _path_node**, int, unsigned char) (API.cpp:198)
==23426==    by 0x4E625F6: API_Morph (API.cpp:350)
==23426==    by 0x4E626A0: API_Tagger (API.cpp:379)
==23426==    by 0x400ADC: main
==23426==
==23426== LEAK SUMMARY:
==23426==    definitely lost: 420 bytes in 2 blocks
==23426==    indirectly lost: 728 bytes in 6 blocks
==23426==      possibly lost: 0 bytes in 0 blocks
==23426==    still reachable: 0 bytes in 0 blocks
==23426==         suppressed: 0 bytes in 0 blocks
==23426==
==23426== For counts of detected and suppressed errors, rerun with: -v
==23426== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 4 from 4)
...