C中m alloc和malloc的初始化

问题描述 投票:0回答:2

为什么malloc总是用垃圾值初始化而calloc总是用0初始化?任何背后的原因?

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

动态地重新分配内存后,它的初始值是什么?

代码:

int *ptr;
ptr = (int *) realloc(ptr,50);
printf("%d",*ptr);
c malloc dynamic-memory-allocation realloc calloc
2个回答
3
投票

malloc仅分配指定大小的内存。 malloc执行相同的操作(使用不同的参数),但也旨在将内存初始化为零。这就是它们的设计方式。

您可以使用calloc进行动态重新分配,但是它用于重新分配,在您的示例中不是。 calloc仅可用于已用reallocreallocrealloc初始化的内存,或者如果指针为malloc则等同于calloc


2
投票

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

此行为由C标准定义。

实际上,realloc根本不初始化分配的内存。这主要是出于性能原因。在自己写信之前,请勿阅读它,以免招致UB。

NULL 指定用于初始化分配给所有malloc的内存。

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

malloc()。只需将calloc()作为第一个参数即可。

您的示例已调整:

0

打印:

You can
© www.soinside.com 2019 - 2024. All rights reserved.