动态内存stdlib.h
作用:让程序员自己来动态的申请空间,更加灵活
存在于堆区
malloc和free
malloc:
申请一块连续可用的空间,并返回指向这块空间的指针
void* malloc(size_t size);
free:
把空间的使用权力还给操作系统,用来做动态内存的释放和回收,只会free给的那一块
使用:
常见错误:
改正:
calloc和realloc
calloc:自动将申请空间初始化
malloc和calloc区别只在于calloc会在返回地址之前把申请的空间的每个字节全初始化为0,
如果printf将会得到0 0 0 0 0 0
realloc:对动态开辟内存大小进行调整,让其更加灵活
情况1:直接在原有内存后面追加
情况2:1.找到一个新的内存
2.拷贝
3.释放旧的内存
4.返回新的内存
使用:
常见错误
1.对NULL指针的解引用操作
2.对动态开辟空间的越界访问
3.对非动态空间使用free
4.使用free释放一块动态开辟内存的一部分
5.对同一块动态内存多次释放
6.忘记释放(内存泄漏)
动态开辟的空间一定要释放,否则会造成内存泄漏
malloc/ calloc/ realloc 要和 free 成对出现
检查程序忘free了怎么办呢———维护:退出程序,操作系统自动回收
例题:
1.
2.
柔性数组
介绍:
1. 结构体中,最后一个成员 //因为柔性,所以要最后一个
2.是未定义大小的数组
优点:相较于结构体内指针
1.方便内存释放,不用free两次
2.有利于访问速度
malloc多,内存碎片就会多