Я пытаюсь научиться использовать 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 allocated
from?
Обновление:
Это похоже на 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)