动态内存分配

本文介绍了动态内存分配的必要性,重点讲解了C语言中的malloc、calloc、realloc和free四个内存申请函数,以及它们在栈区、堆区和静态区的应用,同时提到了柔性数组的概念和使用方法,强调了内存管理的重要性,以防内存泄漏。
摘要由CSDN通过智能技术生成

为什么要使用动态内存分配

在我们现已经找到的俩种开辟内存的方式

int a = 0;    char b[10] = { 0 };

这俩种方式在开辟内存时大小就是确定的,大小也不能在运行后改变,当实际上有很多变量的大小是不确定的,甚至要在程序运行后继续增加或者减少内存,所以就引用了动态内存分配,让程序员可以自己按需申请和使用空间

三个重要的内存申请函数 malloc calloc realloc

c语言内存主要是

栈区(局部变量 形式参数)

堆区(malloc calloc realloc free)

静态区(静态变量 全局变量)

所以这三个函数申请的空间都是在堆区的

malloc

传入的参数是申请空间的大小,在堆区中申请size 个字节的空间,若成功返回该空间的首地址,该地址类型是不知道的所以要自己确定返回的类型,失败返回NULL

calloc

第一个参数是开辟的元素个数,第二个是该元素的大小

实际开辟的空间大小也就是num * size,会将申请的空间初始化为0

其他和malloc一样

realloc

当我们开辟的原有的空间需要修改时,就要用到realloc了,第一个参数是需要修改的空间的地址

第二个是修改后的内存大小,单位是字节

不会初始化空间
 在使用是要注意的是 realloc申请空间是有可能失败的 如果用arr直接去接收就会被赋为NULL,这样你arr原来储存的数据也丢失了,所以要用一个临时变量检查是否修改成功。

free

将动态申请(只能是动态申请的空间)的空间放回给操作系统,若申请的空间未返回给操作系统,就会有内存泄漏的问题,

因为这块空间你不用,但你又不归还让别人也无法使用,在程序运行时,这块空间就泄露了,

而有些程序是要24小时全天跑的,若不归还的话,过不了多久内存就用完了,需要关闭程序重启了,这就是个很严重的问,当程序结束这块空间还是会还给操作系统的,不是永远丢失了。

柔性数组

结构体中的arr没有初始化大小,在使用时用malloc calloc申请他的大小,用realloc修改他的大小,这样arr大小就时可以随意改变的,而数组是 一串连续的地址,所以arr叫柔性数组

也可以这样写

这样写动态开辟的内存是整个结构体的,数组得到的大小是

总的开辟的大小 - 除去数组之外成员的总的结构体大小 这里就是

10 * sizeof(int) + sizeof(int) - sizeof(n)

END

ヽ(✿゚▽゚)ノ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值