2013-04-19 3 views
0

Я пытаюсь выяснить, что заставляет Valgrind предупреждать о некоторых «до сих пор доступных» блоках. Я просмотрел свой код и не могу найти свободный(). Я попытался запустить с --leak-проверки = да --show достижимым = да варианты и это пример вывода:Valgrind - блоки все еще доступны из-за?

==2999== 616 bytes in 7 blocks are still reachable in loss record 8 of 9 
==2999== at 0xD9C3: calloc (vg_replace_malloc.c:597) 
==2999== by 0x3188FA: _xpc_calloc (in /usr/lib/system/libxpc.dylib) 
==2999== by 0x3191D4: _xpc_base_create (in /usr/lib/system/libxpc.dylib) 
==2999== by 0x31FBEA: xpc_string_create (in /usr/lib/system/libxpc.dylib) 
==2999== by 0x31EDFD: xpc_dictionary_set_string (in /usr/lib/system/libxpc.dylib) 
==2999== by 0x320E8C: _libxpc_initializer (in /usr/lib/system/libxpc.dylib) 
==2999== by 0x1BE7D: libSystem_initializer (in /usr/lib/libSystem.B.dylib) 
==2999== by 0x7FFF5FC0FDA5: ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) (in /usr/lib/dyld) 
==2999== by 0x7FFF5FC0FAF1: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld) 
==2999== by 0x7FFF5FC0D2E3: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) 
==2999== by 0x7FFF5FC0D27C: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) 
==2999== by 0x7FFF5FC0E0B6: ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) (in /usr/lib/dyld) 


==2999== 4,096 bytes in 1 blocks are still reachable in loss record 9 of 9 
==2999== at 0xC713: malloc (vg_replace_malloc.c:274) 
==2999== by 0x17F3F7: __smakebuf (in /usr/lib/system/libsystem_c.dylib) 
==2999== by 0x175D19: __swsetup (in /usr/lib/system/libsystem_c.dylib) 
==2999== by 0x1766C3: __vfprintf (in /usr/lib/system/libsystem_c.dylib) 
==2999== by 0x17618D: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) 
==2999== by 0x17F2CF: printf (in /usr/lib/system/libsystem_c.dylib) 
==2999== by 0x100003D21: printEstBasica (mod_dados.c:100) 
==2999== by 0x100001635: main (mod_main.c:179) 

Линии Я понимаю, либо относятся к «печатающих» функций (как printEstBasica), на котором я использую только printf или fprintf ... другие, я не могу понять, что они собой представляют. Я читал другие сообщения, которые говорили, что могут ссылаться на дополнительную информацию, которую использовал компилятор. м не уверен. Одна вещь, которая заставляет меня думать, что: я запустил valgrind на разных наборах данных (для обработки программой), с разными размерами, и количество доступных до сих пор байтов всегда одинаково.

Заранее спасибо !

ответ

0

Я пытаюсь выяснить, что заставляет Valgrind предупреждать о некоторых «доступных досягаемости» блоках.

Вас спросил Valgrind, чтобы рассказать вам о них с --show-reachable=yes флагом. Если вы не хотите их видеть, не используйте этот флаг.

Теперь ваш вопрос действителен вопрос, вероятно, «какие блоки доступны, и мне все равно?».

Ответ: не очень. Все еще доступные блоки означают, что программа могла бы иметь free() d, если захочет (она все равно может найти == досягаемость), это просто не ухаживать за.

Вот пример программы, которая будет генерировать «еще достижим»:

int DoSomething() 
{ 
    // Heap-allocated so as not to exhaust stack. 
    // Allocated only once. 
    static char *const error_buf = malloc(10000); 
    return DoSomethingWithErrorBuf(error_buf); 
} 

int main() 
{ 
    return DoSomething(); 
} 
Смежные вопросы