關於SIGSEGV錯誤及處理方法


http://blog.csdn.net/brace/article/details/1102422

今天編程遇到了SIGSEGV錯誤,比較困惑,所以找了些資料,總結一下:
 
        
(1)官方說法是:
SIGSEGV --- Segment Fault. The possible cases of your encountering this error are:

1.buffer overflow --- usually caused by a pointer reference out of range.

2.stack overflow --- please keep in mind that the default stack size is 8192K.

3.illegal file access --- file operations are forbidden on our judge system.
 
        
 
 
        
 
 
        
(2)SIGBUS與SIGSEGV信號的一般區別如下:

1) SIGBUS(Bus error)意味着指針所對應的地址是有效地址,但總線不能正常使用該指針。通常是未對齊的數據訪問所致。

2) SIGSEGV(Segment fault)意味着指針所對應的地址是無效地址,沒有物理內存對應該地址。
 
        
 
 
        
 
 
        
(3)Linux的mmap(2)手冊頁

--------------------------------------------------------------------------
使用映射可能涉及到如下信號

SIGSEGV

    試圖對只讀映射區域進行寫操作

SIGBUS

    試圖訪問一塊無文件內容對應的內存區域,比如超過文件尾的內存區域,或者以前有文件內容對應,現在為另一進程截斷過的內存區域。
--------------------------------------------------------------------------
 
        
 
 
        
 
 
        
弄清楚錯誤以后,就要查找產生錯誤的根源,一般我用以下兩種方法:
 
        
(1)gcc -g 編譯 
     ulimit -c 20000 
     之后運行程序,等core dump 
     最后gdb -c core <exec file> 
 
        
     來查調用棧
 
        
(2)使用strace execfile,運行程序,出錯時會顯示那個系統調用錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM