一,什么是野指针?
野指针是指向位置随机的(乱指一气),错误的指针,系统无法对其进行操作。野指针指向的值是非法的内存地址,指向的内存是不可用的。
二、野指针产生的原因(C语言中常见)
1.局部指针变量没有初始化
我们如果没有手动去初始化全局变量,全局变量会自动初始化为0,而局部变量不会。所以如果我们不将局部指针变量手动初始化为NULL,那么这个局部指针将会是一个野指针,指向一块非法内存地址,系统无法对其进行操作。
2.使用已经释放过的指针
这个错误常见于动态开辟的内存空间,我们使用malloc等动态内存函数后,都要用free函数对其开辟的动态内存空间进行释放,并将其置为空指针,如果我们用了free函数把那块动态内存空间释放了(还给操作系统了),但是还没置将指针变量为空指针就去使用该指针,就会造成非法访问内存。
3.指针指向的变量在使用之前就被销毁了
最常见于“返回栈空间地址”这一问题,在函数中,如果我们返回局部变量指针,就会造成问题,因为函数调用结束后,局部变量就会被销毁。
三,野指针的危害
1.指向不可访问的内存地址->引发段错误;
2.指向一个可用的,但是没有明确意义的空间,程序可以运行,但是实际上程序是有问题的,如果我们对野指针进行了解引用,对其所指向的内存地址作了非法修改,但是这块空间实际上在正在被使用,这个时候里面的正确内容就会被改变,导致程序奔溃,或数据损坏
四,如何规避野指针
1.定义创建一个指针变量时一定要记得初始化
2.动态开辟的内存空间,free()释放内存后,一定要马上将对应的指针置为NULL空指针
3.不要在函数中返回栈空间的指针(地址)或局部变量的地址
4.注意在动态开辟内存后,对其返回值做合理判断,判断其是否为空指针
本文暂时没有评论,来添加一个吧(●'◡'●)