什么是野指針窘拯?
野指針:不正確,指向位置隨機(jī)的指針
產(chǎn)生原因:
1坝茎、創(chuàng)建指針未賦值初始化涤姊,指向隨機(jī)位置
2、釋放指針指向的地址內(nèi)存沒(méi)有清空嗤放,指向垃圾內(nèi)存
3思喊、對(duì)指針的操作已經(jīng)超出了指針變量的作用域
野指針的危害
我們知道野指針是指向一個(gè)不可知地址的指針,這里分為3種情況:
1次酌、指向不可訪問(wèn)的地址
危害:觸發(fā)段錯(cuò)誤恨课。(所謂段錯(cuò)誤,就是訪問(wèn)了不能訪問(wèn)的內(nèi)存。 比如內(nèi)存不存在,或者受保護(hù)等等)
2岳服、指向一個(gè)可用的剂公,但是沒(méi)有明確意義的空間
危害:程序可以正確運(yùn)行,但通常這種情況下吊宋,我們就會(huì)認(rèn)為我們的程序是正確的沒(méi)有問(wèn)題的纲辽,然而事實(shí)上就是有問(wèn)題存在,所以這樣就掩蓋了我們程序上的錯(cuò)誤璃搜。
3拖吼、指向一個(gè)可用的,而且正在被使用的空間
危害:如果我們對(duì)這樣一個(gè)指針進(jìn)行解引用这吻,對(duì)其所指向的空間內(nèi)容進(jìn)行了修改吊档,但是實(shí)際上這塊空間正在被使用,那么這個(gè)時(shí)候變量的內(nèi)容突然被改變唾糯,當(dāng)然就會(huì)對(duì)程序的運(yùn)行產(chǎn)生影響怠硼,因?yàn)槲覀兯褂玫淖兞恳呀?jīng)不是我們所想要使用的那個(gè)值了。通常這樣的程序都會(huì)崩潰移怯,或者數(shù)據(jù)被損壞拒名。
如何避免
既然我們現(xiàn)在已經(jīng)知道了野指針產(chǎn)生的原因,如此芋酌,只要我們不犯這幾種錯(cuò)誤就可以很好的避免野指針的產(chǎn)生增显。
1、定義一個(gè)指針變量時(shí)一定記得初始化
2脐帝、動(dòng)態(tài)開(kāi)辟的內(nèi)存空間使用完free之后一定將對(duì)應(yīng)的指針置為NULL
3同云、不要在函數(shù)中返回棧空間的指針和引用
4堵腹、注意在使用時(shí)對(duì)指針的合法性的判斷