calloc、malloc、realloc应用说明

callocmallocrealloc 是 C 语言中用于动态内存分配的三个不同函数。它们之间的区别主要体现在功能和使用方式上。

malloc (Memory Allocation)

malloc 用于分配指定大小的内存块。

  • 参数:一个参数,表示要分配的内存大小(以字节为单位)。
  • 初始化:分配的内存未初始化,内容未定义。
  • 返回值:返回指向分配的内存块的指针,如果分配失败则返回 NULL

示例:

int *arr = (int *)malloc(10 * sizeof(int)); // 分配一个可以存储10个整数的内存块
if (arr == NULL) {
    // 处理分配失败
}

calloc (Contiguous Allocation)

calloc 用于分配一块可以存储多个元素的内存,并将内存初始化为零。

  • 参数:两个参数,第一个参数是元素的个数,第二个参数是每个元素的大小(以字节为单位)。
  • 初始化:分配的内存被初始化为零。
  • 返回值:返回指向分配的内存块的指针,如果分配失败则返回 NULL

示例:

int *arr = (int *)calloc(10, sizeof(int)); // 分配一个可以存储10个整数的内存块,并初始化为零
if (arr == NULL) {
    // 处理分配失败
}

realloc (Reallocation)

realloc 用于调整之前分配的内存块的大小,可以扩大或缩小内存块。

  • 参数:两个参数,第一个参数是指向之前分配的内存块的指针,第二个参数是新的大小(以字节为单位)。
  • 初始化:如果新内存块大于原始大小,新分配的部分内容未定义。如果新内存块小于原始大小,多余的部分将被丢弃。
  • 返回值:返回指向新内存块的指针,如果分配失败则返回 NULL,原内存块保持不变。

示例:

int *arr = (int *)malloc(10 * sizeof(int)); // 分配初始内存块
if (arr == NULL) {
    // 处理分配失败
}
int *new_arr = (int *)realloc(arr, 20 * sizeof(int)); // 调整内存块大小到可以存储20个整数
if (new_arr == NULL) {
    // 处理分配失败,原内存块arr仍然有效
} else {
    arr = new_arr; // 使用新的内存块
}

总结

  • malloc:分配指定大小的未初始化内存块。
  • calloc:分配指定数量的元素并将其初始化为零。
  • realloc:调整之前分配的内存块的大小,可以扩展或缩小。

根据需要选择合适的函数,以便有效管理内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值