malloc归零内存?

鉴于这个用gcc 4.3.3编译的C代码

#include  #include  int main(int argc, char * argv[]) { int * i; i = (int *) malloc(sizeof(int)); printf("%d\n", *i); return 0; } 

我希望输出是malloc()返回的内存中的任何内容,而输出是0. malloc是否将它返回的内存归零? 如果是这样,为什么?

malloc本身并没有将内存清零,但是许多操作系统会将程序请求的内存归零(出于安全原因)(以防止一个进程访问另一个进程使用的潜在敏感信息)。

malloc()函数不会将分配的内存设置为任何特定值。 如果要确保内存为零,请使用calloc()或等效内容。 否则,你得到之前的任何东西(在你的情况下,可能是零)。

Malloc不必填充内存。 出于性能原因,发行版通常不会对内存执行任何操作。 “安全”库可能具有清除内存的malloc实现。 这取决于图书馆的实施者。 有一些常见的模式由各种编译器的调试库填充到内存中,这在本stackoverflow主题中有解释 。

你肯定不能依赖它0. malloc一个更大的块并转储它看。

分配的内存中的值是正式未定义的。 C99声明: The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate. malloc()可以做任何想做的事情,包括将其归零。 这可能是故意的,实现的副作用,或者你可能只有很多内存恰好为0。

使用Apple的gcc 4.0.1在OS X上使用FWIW即使进行了大量的分配,我也无法让它出现0:

 for( idx = 0; idx < 100000; idx++ ) { i = (int *) malloc(sizeof(int)); printf("%d\n", *i); }