[問題] Exit code為139(segmentation violation)
板上的先進大家好,
小弟有一無窮迴圈C語言程式在Linux下執行,
執行一小時後自動異常終止,出現代碼為139,
請問可能的原因是什麼呢!?
還請板上先進不吝賜教,謝謝大家..
另可有建議的除錯方法呢!?
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.42.70
※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1399294309.A.61F.html
※ 編輯: BIAO (140.124.42.70), 05/05/2014 20:58:23
推
05/05 21:11, , 1F
05/05 21:11, 1F
謝謝j大..
整個程式我並沒有使用動態記憶體,
真要說有free的地方就是存取資料庫後的..mysql_free_result(result);
抑或和字串實字有關呢!?
由於不停的迴圈,而重覆一直宣告字串實字..
程式內的副程式也有多個宣告字元陣列的地方..
我以為區域變數在離開副程式後,便會釋放掉記憶體空間,
難道不是這樣嘛.. XD
※ 編輯: BIAO (140.124.42.70), 05/05/2014 21:20:09
參閱網上此文件http://blog.sina.com.cn/s/blog_75bf554501019cvt.html
一、的確有使用strcpy、sprintf...等指令,
但如果前一小時程式執行沒出錯,一小時後怎麼會出錯呢!?
二、有使用一個執行緒(thread),卻沒加上mutex,
在程序執行過程,小弟刻意不對該執行緒輸入指令,
該執行緒也是無窮迴圈,不停的等候client端送命令進來。
附上完整程式碼,還請板上高手指點,謝謝大家..>//<
https://www.dropbox.com/sh/tbnn6f0qv3eyalu/F0wfudQZzq
※ 編輯: BIAO (140.124.42.70), 05/05/2014 21:44:17
→
05/06 00:30, , 2F
05/06 00:30, 2F
→
05/06 15:35, , 3F
05/06 15:35, 3F
→
05/06 15:36, , 4F
05/06 15:36, 4F
→
05/06 15:37, , 5F
05/06 15:37, 5F
→
05/06 15:39, , 6F
05/06 15:39, 6F
謝謝b大的解說,
程式碼修正部份小錯誤後已重新上傳。
使用valgrind --leak-check=full ./modbus+MySQL+Control26
得到以下結果..(截取片段)
==1062== HEAP SUMMARY:
==1062== in use at exit: 132,574 bytes in 41 blocks
==1062== total heap usage: 97 allocs, 56 frees, 163,638 bytes allocated
==1062==
==1062== 136 bytes in 1 blocks are possibly lost in loss record 2 of 3
==1062== at 0x482C778: calloc (in
/usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==1062==
==1062== LEAK SUMMARY:
==1062== definitely lost: 0 bytes in 0 blocks
==1062== indirectly lost: 0 bytes in 0 blocks
==1062== possibly lost: 136 bytes in 1 blocks
==1062== still reachable: 132,438 bytes in 40 blocks
==1062== suppressed: 0 bytes in 0 blocks
==1062== Reachable blocks (those to which a pointer was found) are not shown.
==1062== To see them, rerun with: --leak-check=full --show-reachable=yes
==1062==
==1062== For counts of detected and suppressed errors, rerun with: -v
==1062== Use --track-origins=yes to see where uninitialised values come from
==1062== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 1 from 1)
Killed
----------------------
--------------------
目前打算先找出這5個錯誤,謝謝大家,會再上來回報^^
※ 編輯: BIAO (140.124.42.70), 05/06/2014 16:31:33
→
05/06 17:41, , 7F
05/06 17:41, 7F
→
05/06 17:42, , 8F
05/06 17:42, 8F
→
05/06 17:43, , 9F
05/06 17:43, 9F
→
05/06 17:44, , 10F
05/06 17:44, 10F
→
05/06 17:44, , 11F
05/06 17:44, 11F
謝謝b大的熱心回覆,
原來有非0結尾的字串@@"
那麼str系列都只能處理"0結尾的字串"嗎!?
另想請問..若是非0字串和為0字串相比較的話,
在記憶體空間會產什麼樣的問題呢!?
因為該段程式是比較字串若相等,則做什麼事情..
而程式也的確有依照要求去執行對應的動作(讀取設備資訊),
所以資料庫內也有產生設備資訊,故小弟也沒想太多/.\
這一~二天有閱讀關於C語言和記憶體配置的文件,
若您不嫌棄的話,可否簡短的敘述一下為什麼會產生問題,
謝謝您.. :D
※ 編輯: BIAO (140.124.42.70), 05/06/2014 17:55:48
→
05/06 17:59, , 12F
05/06 17:59, 12F
→
05/06 17:59, , 13F
05/06 17:59, 13F
→
05/06 18:00, , 14F
05/06 18:00, 14F
→
05/06 18:01, , 15F
05/06 18:01, 15F
謝謝b大的詳細解釋,小弟明白了。
我不是接手維護,而是程式開發者,
是自己看書學,或是需要什麼函式就上網查詢,
由於有時程壓力,所以程式底子並沒有很好。
其實我先前並不了解記憶體管理的重要性,
現在終於自食惡果了... XD
※ 編輯: BIAO (140.124.42.70), 05/06/2014 18:16:35
Linux 近期熱門文章
21
56
PTT數位生活區 即時熱門文章