Valgrind показывает тонны утечек памяти на пустой программе - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь научиться использовать valgrind, и поэтому я написал следующую программу:

// no imports in the program either
int main(void) {
    return 0;
}

Насколько мне известно, это должно привести к утечке памяти и поэтому я должен получитьответ от Valgrind, указывающий на это.Однако вот что показывает valgrind:

$ gcc strings.c -o strings.out && valgrind ./strings.out

==49859== HEAP SUMMARY:
==49859==     in use at exit: 19,158 bytes in 165 blocks
==49859==   total heap usage: 186 allocs, 21 frees, 27,606 bytes allocated
==49859== 
==49859== LEAK SUMMARY:
==49859==    definitely lost: 0 bytes in 0 blocks
==49859==    indirectly lost: 0 bytes in 0 blocks
==49859==      possibly lost: 8,840 bytes in 7 blocks
==49859==    still reachable: 10,318 bytes in 158 blocks
==49859==         suppressed: 0 bytes in 0 blocks

Несколько вопросов по этому поводу:

  • Почему в конце написано 19 158 байт?Я подумал, что в конце должно быть ноль байт, поскольку я даже ничего не определил.
  • Что означает 49859 слева?
  • Наконец, куда приходит 186 allocs, 21 frees, 27,606 bytes allocatedfrom?

Обновление:

Это похоже на Mac-центричную ошибку, и в Google она встречается довольно часто на более новой версии OSX.Запускать то же самое на Ubuntu, похоже, нормально:

==5689== Command: ./main.out
==5689== 
Hello
==5689== 
==5689== HEAP SUMMARY:
==5689==     in use at exit: 0 bytes in 0 blocks
==5689==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==5689== 
==5689== All heap blocks were freed -- no leaks are possible
==5689== 
==5689== For counts of detected and suppressed errors, rerun with: -v
==5689== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
...