Може би е различно от платформа на платформа, но
когато компилирам с 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, дори ако понякога не искате да е така?
РЕДАКТИРАНЕ: О, предишният ми пример не беше 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! (Никога не съм мислил за това). Разбира се, че трябва да се инициализира до нула, когато разпределя нов блок или големия блок.
malloc
да няма нищо общо с това. - person Seth Carnegie   schedule 06.11.2011malloc
в C - person phuclv   schedule 16.10.2017