学了动态内存分配,妈妈再也不用担心我内存不够~【手把手带你进阶C语言】之动态内存管理

本文详细介绍了C语言中的动态内存管理,包括malloc、calloc、realloc和free函数的使用,以及动态内存分配的常见错误,如空指针解引用、越界访问、释放非动态内存等。此外,还探讨了内存泄漏问题和C99中的柔性数组特性,强调了正确管理内存的重要性。
摘要由CSDN通过智能技术生成

国庆不知道大家出去玩了吗?

还是待在家里学习偷偷变强呢?

不管怎么样,在这伟大祖国的诞辰,举国同庆,博主还是要祝愿大家国庆快乐!

国家在一步步向更好更强迈进,我们也不能落下呀~

所以,快跟着博主一起努力提升学习,提升自我,希望在读的各位国之栋梁早日为民族的发展壮大贡献力量。

今天我们要讲的内容是动态内存管理,在开始学习之前,先给博主我,也给国庆假期中仍然热爱学习、热爱编程的你们点个赞吧!

在这里插入图片描述

为什么存在动态内存分配

首先我们要了解的是为什么要存在动态内存分配这个东西呢?

其实我们当前的内存分配是非常有限的。

int n = 20;//4byte
int arr[10];//40byte

而这种内存开辟的方法其实是非常死板的,内存中的空间一旦开辟,则空间就无法再改变了,除非我们更改代码。

为了改善这一情况,C语言中提供了一种动态内存分配的功能,我们开辟了一块空间之后,如果觉得空间大了,我们可以让空间变小,如果空间不够,就让空间增大。

这其实给了程序员更多灵活开辟空间的方式,我们就可以动态地维护空间。

首先,我们说内存中分为栈区、堆区、静态区。
堆区中存放局部变量、函数形式参数;静态区中存放静态变量和全局变量;而堆区中涉及的是动态内存分配,主要与malloc、calloc、realloc、free这几个函数有关。

那么接下来我们就来看看动态内存分配的各个函数。

动态内存分配函数

malloc

在动态区申请一块空间,我们需要用到的是malloc函数。
在这里插入图片描述
我们看从cplusplus中的对这个函数的介绍,malloc函数执行的操作是在堆区上向内存一块连续可用的空间,大小为size字节,并且返回指向这块空间的指针。

这里要注意malloc函数返回的指针类型是void*,因为它并不知道我们要申请的空间是用来存放什么类型的数据的。

所以我们在使用malloc在堆区上创建空间的是时候,我们要把malloc函数的返回类型强制转换成我们需要的指针类型。

在这里插入图片描述
需要注意的是:如果malloc开辟空间是被,则会返回一个NULL指针,所以我们在调用malloc之后,要回其返回值做检查,以确保我们的空间创建成功。

在这里插入图片描述
开辟成功之后,我们就可以对malloc申请得到的空间进行操作。

在这里插入图片描述
我们可以通过调试来看看内存中的情况。

在这里插入图片描述

free

当我们空间使用结束之后,要记得释放空间,这时候就要用到free函数了。
在这里插入图片描述
我们把刚才开辟的动态内存的地址传给free函数,这个函数即会帮我们把这块空间还给内存了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值