malloc归零内存?

end*_*mac 14 c malloc

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

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char * argv[])
{

    int * i;

    i = (int *) malloc(sizeof(int));

    printf("%d\n", *i);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ble 36

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

  • 另请注意,虽然来自操作系统的新内存可能会归零,但如果您的应用程序回收之前使用的内存,则可能不会将其归零.所以,甚至不要考虑依赖这个:) (19认同)
  • 我应该提一下,标准*中的任何内容都不能阻止*malloc将其内存归零.为了效率,*通常*不会,但这不是强制性的. (8认同)

Gre*_*ill 7

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

  • 您是否以相同的方式重复运行相同的程序并期待不同的结果?尽管`malloc()`本身并不能保证将内存清零,但操作系统正在执行相同的工作来加载程序并将其设置为运行.您的运行时库代码执行相同的操作来设置堆内存并开始运行代码.正如另一个答案中所提到的,操作系统可能会为您提供初始化为某个特定值的新内存页,以便将不同的进程隔离开来. (2认同)