动态内存的申请和释放

动态内存的申请和释放

一:申请

1:malloc

定义:当我们需要在堆中申请一块连续且指定大小的内存块时的内存时,我们可以使用动态内存。

 

使用:指针类型+变量名=(指针类型)+malloc+(n*sizeof(数据类型));

例:int *arr=(int *)malloc(sizeof(int));

等同于 int arr[n];     //error 2012上非法

举例:

 

使用时 通常 + 断言 (判断动态内存空间申请成功没)

 

//malloc 有两个兄弟 calloc(自动置零) 和 realloc(扩容)

现在我们就来说说这两个函数

 

2:calloc

 

 

使用:

 

 

举例:

3. realloc

 

 

使用:

 

举例:

 

 

二:释放

调用free()函数   //释放内存

//申请动态内存缺少释放过程会导致:

①:内存泄漏问题(手机变卡)

②:内存碎片问题

 

//free函数可以使用是因为动态分配的内存,有头信息和尾信息

头信息:存储有长度信息

尾信息:粘合剂(可以融合内存碎片成一整块)

举例:

 

 

 

free崩溃的原因解析:

①:越界,漏写sizeof,realloc第二个参数写错

       越界

 

②:改变指针的指向,p++

                    指针指向最后了

 

③:重复释放内存

              指针p和指针q指向的是同一段内存

 

④:释放的不是动态申请的内存

             释放的不是动态申请的内存

 

动态内存非常重要,要彻底了解!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值