首页 > 解决方案 > malloc 和 calloc 的初始化

问题描述

为什么malloc总是用垃圾值初始化,calloc总是用0初始化?背后有什么原因吗?

为什么我们不能使用realloc而不是malloc动态内存分配?

动态重新分配内存后,它的初始值是多少?

代码:

int *ptr;
ptr = (int *) realloc(ptr,50);
printf("%d",*ptr);

标签: cmallocdynamic-memory-allocationrealloccalloc

解决方案


为什么 Malloc 总是用垃圾值初始化而 Calloc 总是用 0 初始化?

此行为由 C 标准定义。

实际上malloc()根本没有初始化分配的内存。这主要是出于性能原因。在自己写之前不要阅读它,以免激怒UB。

calloc() 指定初始化分配给所有0s的内存。

为什么我们不能使用 realloc 而不是 malloc 进行动态内存分配。

你可以。只需NULL作为第一个参数传递。

您的示例已调整:

int *ptr = NULL;
ptr = realloc(ptr, 50);
*ptr = 42;
printf("%d\n", *ptr);

印刷:

42

推荐阅读