我开始学习C语言中的动态内存分配,到目前为止我读过的malloc()函数不会初始化新分配的块的值。为什么malloc()初始化新分配的内存块的值?
在新版本的C中,这已被更改吗? C99和C11?
我执行使用Xcode的下面,所有值正在与0
double *p = (double *) malloc(5 * sizeof(double));
printf("Address of p0 = %p | Valoe of p0 = %f\n", p, *p);
printf("Address of p1 = %p | Valoe of p1 = %f\n", p+1, *(p+1));
printf("Address of p2 = %p | Valoe of p2 = %f\n", p+2, *(p+2));
printf("Address of p3 = %p | Valoe of p3 = %f\n", p+3, *(p+3));
printf("Address of p4 = %p | Valoe of p4 = %f\n", p+4, *(p+4));
初始化我以为只有在函数释放calloc这是真实的()。
我认为这是因为您配合的内存之前未被其他非零变量使用。你不能确定它总是如此。 – lulyon
似乎是未定义的行为。再重复几次,并检查是否仍然得到0. –
只要使用'calloc',如果你想要一个零初始化区域。 –