malloc和calloc的初始化

malloc和calloc的初始化,c,malloc,dynamic-memory-allocation,realloc,calloc,C,Malloc,Dynamic Memory Allocation,Realloc,Calloc,为什么malloc总是用垃圾值初始化,而calloc总是用0初始化?有什么原因吗 为什么我们不能使用realloc而不是malloc来进行动态内存分配 动态重新分配内存后,它的初始值是多少 代码: 只分配指定大小的内存。对不同的参数执行相同的操作,但也设计为零初始化内存。这就是它们的设计方式 您可以使用动态重新分配,但它用于重新分配,在您的示例中不是。realloc只能在已经用malloc、calloc或realloc初始化的内存上使用,或者如果指针为NULL,则它相当于malloc 为什么Ma

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

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

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

代码:

只分配指定大小的内存。对不同的参数执行相同的操作,但也设计为零初始化内存。这就是它们的设计方式

您可以使用动态重新分配,但它用于重新分配,在您的示例中不是。realloc只能在已经用malloc、calloc或realloc初始化的内存上使用,或者如果指针为NULL,则它相当于malloc

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

此行为由C标准定义

事实上,malloc根本不会初始化分配的内存。这主要是出于性能原因。在你写给它之前,不要读它,以免激怒它

calloc被指定为初始化分配给所有0的内存

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

。只需将NULL作为第一个参数传递

你的例子:

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

42

显示的代码将调用未定义的行为。ptr在传递给realloc之前没有确定的值,这要求a值为NULL,b值为malloc、calloc、realloc的结果,或任何使用上述示例之一的派生结果:strdup、getline等。。也就是说,如果管理正确,您可以使用realloc替换malloc和calloc。为了实现自己的malloc和calloc,只有realloc才能实现,这通常是一项交给后起之秀的C工程师的学术任务。例如:mallocn==reallocNULL,值得注意的是,printf%d,*ptr;还调用未定义的行为。在遇到该语句之前,*ptr没有设置确定值,在发布的代码中至少没有。最后,认真地说,在这之后,
42