C Valgrind可能会在简单程序中丢失内存

C Valgrind可能会在简单程序中丢失内存,c,valgrind,C,Valgrind,无论我运行什么程序,Valgrind都会告诉我,3个块中可能有72个字节丢失,即使使用以下简单程序: int main(void) { printf("Hello, World!\n"); return 0; } 你知道这是不是Mac OS sierra上的Valgrind bug吗 我怎么能用这样的程序泄漏内存呢?如果任何预加载的库(例如,通过LD\u PRELOAD)或链接的C运行时的任何部分存在内存泄漏,则很可能发生这种情况 CRT也会执行一些内存分配,这些分配永远不会被

无论我运行什么程序,Valgrind都会告诉我,3个块中可能有72个字节丢失,即使使用以下简单程序:

int main(void)
{
    printf("Hello, World!\n");
    return 0;
}
你知道这是不是Mac OS sierra上的Valgrind bug吗


我怎么能用这样的程序泄漏内存呢?

如果任何预加载的库(例如,通过
LD\u PRELOAD
)或链接的C运行时的任何部分存在内存泄漏,则很可能发生这种情况

CRT也会执行一些内存分配,这些分配永远不会被故意释放,但通常只是一次性的,每个进程只发生一次


Valgrind无法可靠地区分应用程序的哪些部分和哪些部分不是。您只能检查分配内存的堆栈跟踪,并确定这是否是您的域。

它显示“可能丢失”。可能是crt里的什么东西。如果它一直存在,并且没有增长,不要担心。你可以为这些错误生成抑制,因为它们不属于你的程序。事实上,valgrind对已知问题有许多抑制。请注意,已分配和未释放的内存(但仍保留引用)不是泄漏。在进程终止时,将“一次性”分配留给操作系统真空吸尘器清理,这种情况并不少见,甚至可能很糟糕。