文章目录
- 动态内存函数 malloc free
- calloc
- realloc 重新开辟空间
- realloc 也可以第一个参数为NULL,则是直接开辟内存,类似于malloc用法
- 常见的动态内存错误
- 对空指针进行解引用操作
- 对开辟的内存越界访问
- 对非动态开辟的内存使用free释放
- 使用free释放动态开辟内存的一部分
- 对同一块动态内存多次释放
- 如何避免对同一块内存释放两次
- 动态开辟的内存忘记释放,内存泄漏
- 几个 经典笔试题
- 题目1
- 题目2
- 题目3
- 题目4
- C++/C程序内存开辟
- 柔性数组
- 包含柔性数组成员 的结构体大小计算
- 柔性数组的使用
- 动态通讯录
最好先看
https://blog.csdn.net/qq_37891604/article/details/132820013
动态内存函数 malloc free
malloc
size要开辟的字节数,申请好空间后是把这段空间的起始地址给你,返回第一个字节的地址
动态内存申请可能失败(总共20的空间,你要申请300)
用完要释放
calloc
realloc 重新开辟空间
realloc 也可以第一个参数为NULL,则是直接开辟内存,类似于malloc用法
常见的动态内存错误
对空指针进行解引用操作
对开辟的内存越界访问
对非动态开辟的内存使用free释放
使用free释放动态开辟内存的一部分
p不在指向动态开辟出来的内存的起始位置会出问题,p不走到最后,走到一半也不行
中间也不行
对同一块动态内存多次释放
如何避免对同一块内存释放两次
动态开辟的内存忘记释放,内存泄漏
几个 经典笔试题
题目1
修改正确1
修改正确2
题目2
错误,不要返回栈区的地址
加static没事在全局区了
题目3
改正
题目4
改正
C++/C程序内存开辟
内核空间:留给内核使用的一段空间,内核态,4G的内存留2G给操作系统用
柔性数组
cpu的访问速度是超级快的,而内存的读写速度又比较慢,那怎么办呢?我们有一种方式就是把内存的数据放到高速缓存里,高速缓存放到寄存器里 ,当cpu每次处理数据的时候去寄存器里拿,效率就会快,寄存器找不到就去cache里找,cache里找不到就去内存里找,
这两种写法是一个意思,大小是位置的称为柔性数组成员,即数组的大小是可以调整的
包含柔性数组成员 的结构体大小计算
结构体的大小是不包含柔性数组的
柔性数组的使用
重新分配内存
第二种写法
也可以不malloc,直接创建个结构体变量,那就是在栈上了
动态通讯录
改进
ps不是malloc出来的不用释放