动态内存的申请和释放

动态内存的申请和释放

一:申请

1malloc

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

 

 


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

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

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

举例:

 

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

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

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

2calloc

 

 


使用:

 


举例:

 

3. realloc

 


使用:

 

举例:


二:释放

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

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

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

②:内存碎片问题

 

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

头信息:存储有长度信息

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

举例:

 

free崩溃的原因解析:

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

       越界

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

                    指针指向最后了

③:重复释放内存

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

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

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

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

猜你喜欢

转载自blog.csdn.net/it_quanwudi/article/details/80156190