Segment fault 常見緣由

[https://blog.csdn.net/qq_22238021/article/details/79872978].net

本質緣由在於:程序訪問了非法的地址

1.引用空指針
2.野指針
3.訪問越界指針

形成的緣由有多種:
主觀緣由:
1.新申請指針忘記賦NULL,也忘記分配空間,直接使用形成非法訪問。
2.爲指針賦值時,地址通過計算而來。計算過程有問題,致使賦值的地址不正確,
好比地址通過計算涉及到類型轉換之類操做,很容易由於類型轉換形成截斷。blog

客觀緣由:
3.保存指針的空間被修改,好比你結構體中的一個成員是指針變量,它前面一個成員也是指針變量,
當前面的成員訪問越界時,修改了後面成員的值,即前面操做踩了後面的空間,或者被其餘程序踩到。
當再引用後面的指針時,就會發生段錯誤。或者free後面的指針時也會發生錯誤。get

避免方法:
主觀方面:
1.新申請指針賦NULL。
2.malloc和free必定要成對使用。
3.地址由計算得來時必定要當心處理,避免計算緣由形成錯誤的地址。
客觀方面:
4.懷疑發生段錯誤緣由是指針地址被踩時,移動該成員到前面一點的位置,避免被踩,驗證可否解決問題。class

相關文章
相關標籤/搜索