动态内存分配

动态内存分配

为什么存在动态内存

动态内存分配

动态内存分配

动态内存分配

动态内存函数

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日