malloc, calloc, realloc,有什么区别

malloc, calloc, 和 realloc 都是用于动态内存分配的C标准库函数,但它们有不同的用途和行为。下面是它们的区别:

1. malloc (Memory Allocation)

  • 功能: malloc 用于分配指定大小的内存块,返回指向该内存块的指针。
  • 参数: 它接受一个参数,表示需要分配的字节数。
  • 初始化: malloc 分配的内存块中的内容是未初始化的,也就是说内存块中的数据是随机的,可能包含任何值。
  • 示例:
    int *arr = (int *)malloc(10 * sizeof(int));
    
    这段代码分配了一个包含10个整型元素的数组的内存块,大小为 10 * sizeof(int) 字节。

2. calloc (Contiguous Allocation)

  • 功能: calloc 用于分配一个可以容纳多个相同大小元素的内存块,并将分配的内存初始化为0。
  • 参数: 它接受两个参数:一个是元素的数量,另一个是每个元素的大小。
  • 初始化: 与 malloc 不同,calloc 分配的内存块会被初始化为0。
  • 示例:
    int *arr = (int *)calloc(10, sizeof(int));
    
    这段代码分配了一个包含10个整型元素的数组的内存块,并将每个元素都初始化为0。

3. realloc (Reallocation)

  • 功能: realloc 用于调整之前分配的内存块的大小。它可以扩大或缩小内存块的大小,并返回指向新内存块的指针。如果内存块变大了,新增部分的内容是未初始化的。
  • 参数: 它接受两个参数:一个是指向之前分配的内存块的指针,另一个是新的大小。
  • 初始化: 新分配的内存部分是未初始化的。如果扩展了内存块,扩展部分的内容将是随机的。
  • 示例:
    arr = (int *)realloc(arr, 20 * sizeof(int));
    
    这段代码将之前分配的内存块扩展到可以容纳20个整型元素的大小。

总结

  • malloc 适用于分配未初始化的内存块。
  • calloc 适用于分配并初始化为0的内存块。
  • realloc 适用于调整已有内存块的大小。

这些函数配合 free 函数使用,free 用于释放之前分配的内存,防止内存泄漏。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值