野指针是指指针指向的位置是随机的,不明确的,未知的,没有限制的。
野指针的成因
指针未初始化
如上图,指针没有初始化,则指针指向的地址是随机的,若该地址已经被其他程序占用,且对指针进行解引用,可能会造成程序出错。
指针越界访问
如上图,当i为5时,指针的指向超出数组的范围,该指针为野指针。
指针指向的空间释放
如上图,当test()函数运行完后,局部变量a的空间就会被释放掉,此时返回局部变量的地址给p,p为野指针,若对该地址进行解引用,可能会造成非法访问。
如何规避野指针
指针初始化
当创建一个指针时,如果知道指针指向哪里,就直接赋值,如果不知道指针指向哪里就将指针置为空。
如下图:
小心指针越界
当使用指针指向数组时,要明确数组所能使用的空间,不能超出范围,超出了就是越界访问。
如下图:
避免返回局部变量的地址
使用指针尽量在函数内部使用,避免返回局部变量的地址。
当指针变量不再使用时,及时置空
当指针指向的区域使用完后,若后续不再使用该指针,则要将该指针置为空。因为约定俗成的⼀个规则就是:只要是NULL指针就不去访问, 同时使⽤指针之前可以判断指针是否为NULL。
如下图: