【C/C++】【动态内存管理】 calloc 和 realloc

零.导言

        上一篇文章我介绍了 malloc 和 free 函数的使用,让大家对动态内存有了初步的认识。今天就让我来介绍和 malloc 关系密切的 calloc 和 realloc ,它们的用法和 malloc 差不多。


一.calloc

        先说重点:!!!calloc 与 malloc 不同的是, calloc 动态申请空间后,会将数组的每个元素初始化为0  !!!因此使用 calloc 动态申请数组后不需要进行初始化的操作。

        接下来我们看一下calloc的用法:

int capacity = 10;
int* arr = (int*)calloc(capacity, sizeof(int));
if(arr == NULL)
{
    perror("malloc fail!");
    exit(1);
}

        与 malloc 不同的是, calloc 有两个参数:第一个参数是你所申请的数组的元素个数,第二个参数是你所申请的数组的单个元素占用空间的大小,其他要点与 malloc 一致。


二.realloc

         相较于 calloc ,realloc 的使用较为复杂,realloc 的作用是重新分配动态内存空间的大小,也是进行动态内存管理的关键。使用方法如下:

typedef struct SeqList
{
    int* arr;
    int size;
    int capacity;
}SeqList;

void SLPushBack(SeqList* ps, int x)
{
    if(ps->size == ps->capacity)
    {
        int NewCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;
        int* tmp = (int*)realloc(ps->arr, sizeof(int) * NewCapacity);
        if(tmp == NULL)
        {
            perror("realloc fail!");
            exit(1);
        }
        ps->arr = tmp;
    }
    ps->arr[ps->size++] = x;
    ps->capacity = NewCapacity;
}

        例如我在这里定义了一个结构体:顺序表,在顺序表中我动态建立了一个数组,当我需要在这个数组中插入元素时,如果判断数组空间大小不够,则使用 realloc 重新分配数组的空间大小,realloc 有两个参数,第一个参数为原数组的地址,第二个参数为需要重新分配的空间大小。

        其他要点与 malloc 相同。


三.realloc的注意事项

        需要注意的是,当 realloc 动态分配内存失败时,不会改变元素组的内容与大小,并且返回NULL


四.相关链接

        C语言指针的介绍-优快云博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值