Segmentation fault 段錯誤 原因簡單總結

Segmentation fault 是linux c 中很常見的錯誤。結合資料和個人經驗,一般有以下原因。

1.指針指向了非法內存,例如申明一個指針,但是沒有對指針進行初始化,直接就引用,或者引用裏面的元素或者函數,或者沒有分配內存就進行釋放等,另外,申請內存還要檢查是否申請成功,如果沒有申請成功也會出現這種情況。

2.通過malloc申請的內存實際上在要在第一次使用時才真正分配,這種情況也有可能是Segmentation fault的原因之一。解決方法很簡單,在malloc成功之後立即調用memset等函數進行整塊內存的初始化。比如:

        buf=(char*)malloc(size);

        memset(buf,'\0',size);

3.隱式調用函數也可能造成Segmentation fault。比如一個函數 fun 沒有在頭文件中聲明就被使用,其中用到了一些malloc的變量,這時候也有可能Segmentation fault。

4.注意編譯時的warning。很多問題warning都是潛在的bug,解決這些warning對解決Segmentation fault可能有幫助。

參考資料:http://zhidao.baidu.com/question/69608327




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章