Segmentation fault到底是何方妖孽
那么對(duì)于任何沒(méi)有經(jīng)過(guò)MMU映射過(guò)的虛擬空間的地址,不管進(jìn)程是執(zhí)行寫操作還是讀操作,操作系統(tǒng)都會(huì)捕捉到這個(gè)錯(cuò)誤的非法訪問(wèn),然后輸出一個(gè)“Segmetation Fault”的錯(cuò)誤提示信息并強(qiáng)行終止進(jìn)程。
程序之所以會(huì)時(shí)不時(shí)的出現(xiàn)“Segmetation Fault”的根本原因是進(jìn)程訪問(wèn)到了沒(méi)有訪問(wèn)權(quán)限的地方,諸如內(nèi)核區(qū)域或者其0x08048000之前的地方,或者由于要訪問(wèn)的內(nèi)存沒(méi)有經(jīng)MMU進(jìn)行映射所導(dǎo)致。而這種問(wèn)題比較多的是出在malloc()之類的動(dòng)態(tài)內(nèi)存申請(qǐng)函數(shù)申請(qǐng)完內(nèi)存,釋放后,沒(méi)有將指針設(shè)置為NULL,而其他地方在繼續(xù)用先前申請(qǐng)的那塊內(nèi)存時(shí),由于內(nèi)存管理系統(tǒng)已經(jīng)將其收回,所以才會(huì)出現(xiàn)這樣的問(wèn)題。良好的關(guān)于指針的使用習(xí)慣是,使用之前先判斷其是否為NULL,所有已經(jīng)歸還給操作系統(tǒng)的內(nèi)存,其訪問(wèn)指針都要及時(shí)置為NULL,防止所謂的“野指針”到處飛的情況,不然在大型項(xiàng)目里,光是圍剿“Segmetation Fault”就要耗費(fèi)不少兵力。
總結(jié)
以上是生活随笔為你收集整理的Segmentation fault到底是何方妖孽的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 难点—在引用数组元素时指针的运算
- 下一篇: C语言头文件深入理解