概念:
野指针就是指指针指向的位置是不可知的(随机的、不正确的、没有明确限制的),指向的是一段非法地址。往往会造成内存越界、段错误的问题。
(民间也称它为分手指针,分手后,ta搬家了,还通过旧地址去找ta)
造成野指针的原因
1、指针未初始化
我们知道,局部变量未初始化,默认为随机值。同样局部指针变量未初始化,也是默认随机值。
2、指针越界访问
这是正常的访问,利用指针,访问a数组的元素。
这是越界访问,访问超过a数组分配的空间的元素。
3、指针指向的空间被释放
a申请的4个字节的空间,在出test函数后,就把这4个字节的空间还给操作系统了,相当于这块空间不属于我们可以利用的了。
当再利用p找回这个空间时,这块空间已经不属于我们了,有可能已经被操作系统分给其他部分了,这就属于非法访问了。
如何规避野指针
1、指针初始化
2、小心指针越界
3、当指针指向的空间释放,就使其置为NULL
当这块地址会被还给操作系统,就把这个指针变量赋值为NULL。
当我们不知道p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p !=NULL)进行防错处理。
但如果在空间释放后,没有对其赋值为NULL,那语句if (p !=NULL)是没有起到作用的。
4、指针使用之前,检查其有效性