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