动态内存管理1❤

前言:

c语言中的数据结构通常是固定的。例如一旦程序完成了编译,数组元素的数量就固定了。因为在编写程序的时候强制选择的大小,所以固定大小的数据结构可能出现问题。那么我们就需要动态存储分配,即在程序执行期间分配内存单元的能力。利用动态存储分配,可以动态存储分配,可以设计出能根据需要扩大的数据结构。

一:内存分配函数

1》:malloc

malloc函数——分配内存块。但是不对内存块进行初始化。

malloc
void* malloc (size_t size);
可以看出它的返回类型是void*,是因为malloc只知道申请多大的空间,但是不知道回放了什么类型的数据

malloc申请的空间是内存的堆区。可以参考下面的图片

 2》:calloc

calloc函数————分配内存块,并且对内存块进行清零。

calloc
void* calloc (size_t num, size_t size);
calloc函数为num个元素的数组分配空间,其中每个元素的长度是size个字节

 3》:realloc

realloc函数--------------调整先前分配的内存块大小

realloc
void* realloc (void* ptr, size_t size);
当数组分配完内存后,可能会发现数组过大或者过小。realloc函数就可以调整数组的大小使它更加合适需求。

注意:当调用realloc函数时,ptr必须指向先前通过malloc、calloc或者realloc的调用获得的内存块。其中的size表示内存块的新尺寸,新尺寸没有要求,按实际情况来规定尺寸。

其如果调整空间失败,会返回NULL.

如果调试空间成功,则有两种情况

1:在已经开辟好的空间后面,没有足够的空间,直接进行空间的扩大

在这种情况下,realloc函数会在内存的堆区重新找一个空间(满足新的空间的大小需求)

同时会把旧的数据拷贝新的空间,然后释放旧的空间,同时返回新的空间的起始地址

2:已经开辟好的空间后面,有足够的空间,直接进行扩大,扩大空间后,直接返回旧的空间的起始地址。

补充:free函数 使用free函数很简单,只需要简单地把指向不需要的指针传递给free函数就可以释放相应的地址了。free函数的实参必须时先前由内存分配函数返回的指针。

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏蓄力中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值