** :
一、段錯誤的形式:
在程式設計中以下幾類做法容易導致段錯誤,基本上是錯誤地使用指標引起的。
1)訪問系統資料區,尤其是往系統保護的記憶體位址寫資料最常見就是給乙個指標以0位址。
2)記憶體越界(陣列越界,變數型別不一致等): 訪問到不屬於你的記憶體區域。
解決方法:我們在用c/c++語言寫程式的時候,記憶體管理的絕大部分工作都是需要我們來做的。實際上,記憶體管理是乙個比較繁瑣的工作,無論你多高明,經驗多豐富,難免會在此處犯些小錯誤,而通常這些錯誤又是那麼的淺顯而易於消除。但是手工「除蟲」(debug),往往是效率低下且讓人厭煩的,本文將就"段錯誤"這個記憶體訪問越界的錯誤談談如何快速定位這些"段錯誤"的語句。
二、下面將就以下的乙個存在段錯誤的程式介紹幾種除錯方法:
test的**如下:
[root@localhost test]# cat test.c -n
1 #include
2 int main(void)
3
1)使用命令 gcc -g -rdynamic test.c 然後gdb除錯
[root@localhost test]# gcc -g -rdynamic test.c
1.1)查詢段錯誤:
這種方法也是被大眾所熟知並廣泛採用的方法,首先我們需要乙個帶有除錯資訊的可執行程式,所以我們加上「-g -rdynamic"的引數進行編譯,然後用gdb除錯執行這個新編譯的程式,具體步驟如下:
從這裡我們還發現程序是由於收到了sigse**訊號而結束的。通過進一步的查閱文件(man 7 signal),我們知道sigse**預設handler的動作是列印」段錯誤"的出錯資訊,並產生core檔案,由此我們又產生了方法二。
2)使用命令 ulimit 命令
1.1)查詢段錯誤:
如何解決段錯誤
程式執行時崩潰應該是經常遇到的事情,本篇文中就來講解一下在linux下如何解決程式崩潰,也就是發生了段錯誤之後找到程式具體出錯的地方。如果程式通過了編譯,但是在使用命令 a.out 執行時程式崩潰了,即顯示 段錯誤 core dumped 其實系統會在程式崩潰的那一剎那將整個核心的資訊記錄在乙個檔案...
Workflow常見錯誤如何解決
workflow在cluster跑的時候經常會出現一些錯誤。一般有下面幾種辦法解決 1.重啟。刪掉gen,workspace資料夾後重新跑一次。2.檢視vektor.log。根據關鍵字查詢vektor.log檔案裡面的資訊,定位錯誤。3.如果在local可以跑通,在cluster跑不通一般 1.檢查...
如何解決登入元件錯誤 4 ?
電腦管家提示 登入元件錯誤 4 qq提示 initialization failure 0x0000000c 很多軟體都不能正常使用。這個時候,電腦是否已經斷網,無法連網?該問題是由於winsock 目錄異常導致,很可能是由於winsock目錄被惡意程式篡改破壞,解決方法如下 不論是win8系統還是...