勵志

勵志人生知識庫

什麼是段錯誤

段錯誤是計算機軟體運行過程中可能出現的一種特殊錯誤情況。當程式嘗試訪問不允許訪問的記憶體位置,或試圖以不允許的方式訪問記憶體位置(例如嘗試寫入唯讀位置,或覆蓋部分作業系統)時會發生段錯誤。在現代計算機系統中,每個程式都有自己的地址空間,由多個不同的段組成。每個記憶體段都有其規定的訪問許可權和大小範圍,當程式嘗試訪問未經授權的記憶體段或者超出分配的記憶體段範圍時,就會報出段錯誤。

段錯誤產生的原因包括:

訪問不存在的記憶體地址:在C代碼中,段錯誤通常發生由於指針的錯誤使用,特別是在C動態記憶體分配。非關聯化一個空指針總是導致段錯誤。但野指針和懸空指針指向的記憶體,可能會或可能不會存在,而且可能或不可能是可讀的還是可寫的,因此會導致瞬態錯誤。

訪問系統保護的記憶體地址:例如,將一個指針指向系統保護的記憶體地址並嘗試寫入數據,會導致段錯誤。

訪問唯讀的記憶體地址:例如,程式寫入自己的一部分代碼段或者是唯讀的數據段,這些都是由作業系統載入到唯讀存儲器,嘗試寫入這些記憶體地址也會導致段錯誤。