也许从平台到平台不同,但是
当我使用gcc编译并运行下面的代码时,我每次都在ubuntu 11.10中得到0.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
Run Code Online (Sandbox Code Playgroud)
为什么malloc表现得像这样,即使有calloc?
是不是意味着只是将值初始化为0会产生不必要的性能开销,即使您有时不想要它也是如此?
编辑:哦,我之前的例子不是initiazling,但碰巧使用"新鲜"块.
我正在寻找的是为什么它在分配一个大块时初始化它:
int main()
{
int *a = (int*) malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = (double*) malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
Run Code Online (Sandbox Code Playgroud)
但感谢您指出在进行mallocing时存在安全原因!(没想过).当分配新块或大块时,它必须初始化为零.