动态内存分配
动态内存分配
为什么存在动态内存
动态内存函数
malloc
但是动态内存分配可能会出错,如果出错就会返回空指针
那正常使用是怎么做呢
那我们现在只是开辟了一个内存空间,我们应该怎么释放内存空间呢
free
calloc
realloc
调整动态内存开辟的空间大小
realloc在调整内存空间存在两种情况
1.原有空间之后有足够大的空间
2.原有空间之后没有足够大的空间
常见的动态内存错误
1.对空指针进行解引用操作
2.对动态开辟内存的越界访问
3.对非动态内存使用free释放
4.使用free释放动态开辟内存的一部分
5.对同一块动态内存多次释放
如何可以避免这个问题,上面已经提到,就是把指针p赋为空指针
在这里第二个free(p)虽然什么也不做,但是可以有效避免程序崩溃
6.对动态开辟内存忘记释放(内存泄漏)
几个经典的面试题
题目一
修改一:
修改二:
题目二
同理这种也是错误的
但只要加上一个static延长变量的生命周期,a的地址也就存在静态区了,就是正确的了
这种也是正确的
题目三
题目四
修改:
题目五
C/C++程序的内存开辟
柔性数组
基础概念
即:
基本使用
如果想调整柔性数组的大小
或者这样使用分配空间:
如果想调整柔性数组的大小:
柔性数组的特点
柔性数组的好处
作者:吕文康
学校:山东第一医科大学
2020年11月18日