目录
四个内存区间
- 代码区
存放程序中的代码,只读 - 全局变量与静态变量区
在程序编译时分配好,程序运行时一直存在,如:全局变量、静态变量、字符串常量 - 局部变量区(栈)
在执行函数时,函数内局部变量可以在栈上自动创建,函数执行结束时这些存储单元自动被释放,局部变量区只有8M - 动态存储区(堆)D
在程序运行时才能确定,无法预先分配空间,只能动态人为分配到堆区
动态内存的申请和释放
malloc
#include <stdlib.h>
void *malloc(size_t size)//size为字节数,成功返回起始地址,失败返回NULL
返回值是 void *,根据实际情况,将 void *转换成所需要的指针类型,内存中的内容需要自行初始化
free
#include <stdlib.h>
void free(void *ptr);//ptr指的是需要释放的内存的起始地址
free释放完后应该将指针置为NULL
野指针
野指针指的是指向“垃圾”内存的指针,产生原因包括:
- 指针变量没有被初始化
- 指针被free之后没有置为NULL
- 指针操作超越了变量的作用范围