野指针和空悬指针 关于野指针的产生危害和规避方法
一,什么是野指针?野指针是指向位置随机的(乱指一气),错误的指针,系统无法对其进行操作野指针指向的值是非法的内存地址,指向的内存是不可用的,我来为大家科普一下关于野指针和空悬指针 关于野指针的产生危害和规避方法?以下内容希望对你有帮助!
野指针和空悬指针 关于野指针的产生危害和规避方法
一,什么是野指针?
野指针是指向位置随机的(乱指一气),错误的指针,系统无法对其进行操作。野指针指向的值是非法的内存地址,指向的内存是不可用的。
二、野指针产生的原因(C语言中常见)
1.局部指针变量没有初始化
我们如果没有手动去初始化全局变量,全局变量会自动初始化为0,而局部变量不会。所以如果我们不将局部指针变量手动初始化为NULL,那么这个局部指针将会是一个野指针,指向一块非法内存地址,系统无法对其进行操作。
2.使用已经释放过的指针
这个错误常见于动态开辟的内存空间,我们使用malloc等动态内存函数后,都要用free函数对其开辟的动态内存空间进行释放,并将其置为空指针,如果我们用了free函数把那块动态内存空间释放了(还给操作系统了),但是还没置将指针变量为空指针就去使用该指针,就会造成非法访问内存。
3.指针指向的变量在使用之前就被销毁了
最常见于“返回栈空间地址”这一问题,在函数中,如果我们返回局部变量指针,就会造成问题,因为函数调用结束后,局部变量就会被销毁。
三,野指针的危害
1.指向不可访问的内存地址->引发段错误;
2.指向一个可用的,但是没有明确意义的空间,程序可以运行,但是实际上程序是有问题的,如果我们对野指针进行了解引用,对其所指向的内存地址作了非法修改,但是这块空间实际上在正在被使用,这个时候里面的正确内容就会被改变,导致程序奔溃,或数据损坏
四,如何规避野指针
1.定义创建一个指针变量时一定要记得初始化2.动态开辟的内存空间,free()释放内存后,一定要马上将对应的指针置为NULL空指针3.不要在函数中返回栈空间的指针(地址)或局部变量的地址4.注意在动态开辟内存后,对其返回值做合理判断,判断其是否为空指针
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com