第五章 内存管理
1. 野指针:地址不确定的指针
int *p = NULL; //不使用时都指向NULL,0地址处,防止野指针产生
2. 静态区、队(heap)、栈(stack,也称堆栈)
1)静态区:保存自动全局变量和static变量(包括static全局和局部变量),静态区在程序的总个生命周期内部存在,由编译器编译时分配
2)堆:由malloc系列函数或new操作符分配内存,其生命周期由free或delete决定,没有释放之前一直存在,直到程序结束
3)栈:保存局部变量,只在函数内有效,函数运行结束时销毁
3. 常见的内存错误
1)指针没有指向一块合法的内存
①结构体成员指针未初始化
②没有为结构体指针分配足够的内存
2)为指针分配的内存太小
3)内存分配成功,但未初始化(定义指针时请初始化,避免使用野指针)
4)内存越界:一般由于数组或指针出现“多1”或“少1”
5)内存泄露(内存被占用完):
①malloc分配的内存是连续的,必须检查是否已成功分配内存
②malloc和free一定要配对使用
6)内存已经释放,却还在使用
①free之后,指针一定要置空(p = NULL)
②函数返回栈内存(避免在函数内返回定义指针)
③内存使用太复杂,弄不清释放了哪块,哪块没有释放