Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Valgrind在空白程序上显示大量内存泄漏_C_Macos_Valgrind - Fatal编程技术网

C Valgrind在空白程序上显示大量内存泄漏

C Valgrind在空白程序上显示大量内存泄漏,c,macos,valgrind,C,Macos,Valgrind,我正在尝试学习如何使用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 SUMMAR

我正在尝试学习如何使用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
关于这一点,有几个问题:

  • 为什么它说结尾使用了19158字节?我的想法是结尾应该是零字节,因为我甚至没有定义任何东西
  • 左边的49859是什么意思
  • 最后,
    186个alloc,21个free,27606个字节分配的
    从哪里来
更新:

这似乎是一个以Mac电脑为中心的错误,在谷歌新版本的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)

libc–提供
printf
main
的东西–在后台做很多事情。还请注意,仅在退出时使用内存并不意味着您有泄漏(请参阅泄漏摘要,没有明确的损失报告)。屏蔽系统分配内存的
valgrind
附带的“抑制”文件通常只屏蔽Linux上的libc(并且不再完全屏蔽)。在实际的
valgrind
手册中有生成新抑制文件(memcheck的第二种类型)的说明,例如
valgrind
用于屏蔽100%的系统分配(版本3.12.0有),但更高版本没有。这对于Mac来说或多或少是正常的。启动代码分配了大量在退出时未释放的内存。你永远不会像在Linux上那样“释放所有内存”。比如说,,