也许每个站台都不一样,但是
当我使用 gcc 编译并运行下面的代码时,我在 ubuntu 11.10中每次都得到0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = malloc(sizeof(double)*100)
printf("%f", *a);
}
为什么即使有 calloc,malloc 也会这样?
这是否意味着仅仅将值初始化为0就会产生不必要的性能开销,即使有时候您不希望这样做?
编辑: 哦,我之前的例子不是初始化,而是碰巧使用了“新鲜”块。
我正在寻找的是为什么它会在分配大块时初始化它:
int main()
{
int *a = malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
但是谢谢你指出恶意分配是有安全原因的!(从没想过)。当然,在分配新块或大块时,它必须初始化为零。