总结下来:
要么指针 指向有效的地址,要么就是空指针,但写出空指针之后需要解引用它时,要判断一下
1.野指针是什么?
野指针就是指向位置不可知的(随机的,不确定的,没有明确限制的)
2.野指针产生的原因
原因: 指针访问了不属于自己的内存空间
非法访问内存: 指针访问了不属于自己的内存空间
(1)指针未初始化
内存空间要申请才能访问,而 未初始化的指针随机访问 便就是 非法访问内存了
(2)指针越界访问
有10个元素,但你却访问第11个元素的地址,这就是越界
你访问了不属于你的内存
(3)指针指向的空间释放
当你申请的内存空间用完后还给操作系统了,但是指针里面可能还是记得这个地址,但是指针指向的内存空间已经不是你的,所以就是野指针
场景1:
变量a 是临时创建的,所以当运行自定义函数之后,局部变量a的生命周期便结束,内存空间也不在是a的,但 指针p 还是存的变量a的地址 ----- 指针p就是野指针
3.如何避免野指针
(1)指针初始化 不知道就初始化NULL(但在使用NULL指针时需要判断一下)
当指针不知道初始化成谁时,就初始化为 NULL (头文件是 stdio.h)
NULL 转到定义:
把0强制转换为 void* 类型, 也就是NULL 被强制转换为地址了
不过还是0
(2)小心指针越界
(3)指针释放空间后及时初始化 为 NULL
(4)NULL 使用前要先用if语句判断一下 指针使用之前检查有效性
举反例:
应对: 用if语句判断一下