(干货)动态内存管理中的四大函数

在讲四大函数之前我们先来讲讲为什么要有动态内存分配

目前我们掌握的动态内存开辟方式有:

上述的开辟空间方式有两个特点:

空间开辟大小是固定的 ;

数组在声明的时候,必须指定数组的长度,数组空间一旦确定了大小不能调整。

但是对于空间的需求,我们有时发现上面的方式是不够用的,所以,C语言引入了动态内存开辟,让程序员自己可以申请和释放空间,这个时候就比较灵活了。

我们接下来就先讲malloc和free这两个函数

malloc

首先,malloc是C语言提供的一个动态内存开辟的函数

这个函数的功能是向内存申请一块连续可用的空间,并返回指向这片空间的指针。

可能情况:

1.如果开辟成功,则返回一个开辟好空间的指针。

2如果开辟失败,则返回一个空指针(NULL) ,因此malloc的返回值一定要做一个检查。

3.返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。

4.如果参数size为0,malloc行为的标准是未定义的,取决于编译器。

接下来是free函数

C语言提供了free这个函数,专门用来动态内存的释放和回收,函数原型如下:

情况:

1.如果参数ptr指向的空间不是动态开辟的,那么free函数的行为是未定义的。

2.如果参数ptr 是NULL空指针,则函数什么事都不做。

注意:1.malloc和free都声明在<stdlib.h>这个头文件中。

2.开辟的动态内存空间要用free释放掉,并给这个指针赋值为空(NULL)。

在说完上述的两个函数之后我们来了解接下来的两个函数calloc和realloc

calloc

calloc的功能与malloc比较类似,calloc也用来开辟动态内存空间

1.函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0.

2.与函数malloc的区别只在于会把每个字节都初始化为0.

所以如果我们对内存开辟的要求要初始化,那么我们可以很方便的使用calloc函数来实现。

那么,我们来讲最后一个函数realloc 

realloc函数的出现让动态内存管理更加灵活。

有的时候我们发现在过去我们申请的空间太小了,有的时候又感觉太大了,那为了合理的使用内存,我们一定会对内存的大小做灵活的调整,而realloc函数就可以做到这一点。

ptr是要调整的内存地址;

size调整之后新的大小;

返回值为内存调整之后的内存起始位置;

这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。

realloc在调整内存空间的时候有两种情况:

1.原有空间有足够大的空间会返回原空间的地址;

2.原有空间没有足够大的空间会返回新的地址。

当然也存在访问失败的情况,这个时候就需要检查它的返回值。

 

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值