Segmentation fault (core dumped)出錯原因及位置分析_gcc

來源:互聯網
上載者:User
一 Segmentation fault (core dumped)原因 Segmentation fault (core dumped)多為記憶體不當操作造成。null 指標、野指標的讀寫操作,數組越界訪問,破壞常量等。如最近的勢能圖代碼中的鏈表操作,對鏈表的新增和釋放包括賦值等等,如出現不當操作都有可能造成程式崩潰。對每個指標聲明後進行初始化為NULL是避免這個問題的好辦法。排除此問題的最好辦法則是調試。 二 解決辦法 1、使用gdb查看core檔案 在程式崩潰後在目錄中會產生core.xxxx檔案,core檔案中包含著出錯資訊。如果沒有core檔案,是因為系統設定了core檔案大小為0。通過命令ulimit -a即可查詢到。在執行ulimit -c unlimited命令後,core檔案大小就不受限制。此時再次運行程式後目錄中出現core.xxxx檔案。用gdb ./file core.xxxx可查看出錯所在行資訊了。其中file為原執行的程式名。 2、使用gdb偵錯工具 如上述流程不能解決問題,下面可使用gdb單步偵錯工具。重新編譯器,編譯命令中加入-g。如: 
gcc -lm -O3 -g file.c -o file
之後使用gdb命令
gdb file
開始調試過程。

輸入start使程式運行到main中第一行運行代碼。next或者n為執行下一行程式,until xx執行到xx行,print或p可輸出變數值,b xx用於在xx行設定斷點,run或r用於執行程式至下一斷點,d xx刪除xx行斷點。 我們可以先run一遍程式,這時它會提示出錯行資訊。然後until到出錯行前5行,交替執行next和print,輸出與出錯行變數相關變數或指標的值。最終定位出錯的根本操作在哪一行。修改之即可。

這次段衝突bug調試了整整一天,最終找出出錯在兩條鏈表新增表尾後錯將chain1的新增節點指標給了chain2。導致第二次迴圈時malloc函數出錯。在copy重複代碼時一定要注意變數名的修改- -。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.