C语言中 calloc 和 malloc 区别?
在 C 语言中,calloc
和 malloc
都是用于动态内存分配的函数,但它们有以下几个主要区别:
-
初始化:
malloc
: 分配内存时不会对分配的内存进行初始化,因此,分配的内存中的数据是未定义的(可能是随机值)。calloc
: 分配内存时会将所有分配的内存初始化为零。这意味着在使用calloc
分配的内存中,所有字节都被设置为0
。
-
参数:
malloc
: 只需要一个参数,即要分配的字节数,例如malloc(size)
。calloc
: 需要两个参数,第一个是元素的个数,第二个是每个元素的大小,例如calloc(num, size)
,它会分配num * size
字节的内存。
-
返回值:
- 两者都返回一个指向已分配内存的指针。如果内存分配失败,它们都会返回
NULL
。
- 用法示例:
malloc
:int *arr = (int *)malloc(10 * sizeof(int)); // 分配 10 个整数大小的内存,但不初始化
calloc
:int *arr = (int *)calloc(10, sizeof(int)); // 分配 10 个整数大小的内存,并初始化为 0
总结来说,malloc
分配的内存是未初始化的,而 calloc
分配的内存会初始化为零。此外,calloc
需要两个参数来指定内存块的数量和每个块的大小,而 malloc
只需要一个参数来指定总的字节数。