Возможно, он отличается от платформы к платформе, но
когда я компилирую с помощью gcc и запускаю код ниже, я получаю 0 каждый раз в моем ubuntu 11.10.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
Почему malloc ведет себя так, даже если есть calloc?
Разве это не означает, что накладные расходы нежелательны, чтобы инициализировать значения до 0, даже если вы не хотите, чтобы это было иногда?
EDIT: О, мой предыдущий пример не был 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)
Но спасибо за указание, что есть причина БЕЗОПАСНОСТИ, когда mallocing! (Никогда не думал об этом). Конечно, он должен инициализировать до нуля при назначении нового блока или большого блока.