动态内存的申请和释放
一:申请
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指向的是同一段内存
④:释放的不是动态申请的内存
释放的不是动态申请的内存
动态内存非常重要,要彻底了解!