在linux記憶體管理中,linux結合了cpu架構採用了分段機制;
分段就是將記憶體分成大小不同的段空間,將程序之間和程序內部不同資料段之間隔離起來;
當程式記憶體的資料的訪問超出了系統所給這個程式資料段的範圍,系統就會給程序傳送乙個訊號sigsegv,程式將終止退出。
所以,可以說段錯誤都是對記憶體操作錯誤引起的。
這裡列舉了常見的段錯誤:
1.訪問不存在的記憶體、訪問未知的受保護的記憶體;
2.訪問未初始化的指標;
3.寫常量區(唯讀區);
4.在棧中定義過大的陣列,導致程序的棧空間不足;
5.資料型別格式轉換錯誤;
6.4g的buffer會導致io出現段錯誤
7.main函式遞迴呼叫導致棧溢位;
8.陣列讀寫越界;(不一定會導致段錯誤,但一定會踩(覆蓋)了其它資料)
9.使用區域性變數返回值;(錯誤未知,有可能產生斷錯誤)
10.使用已經釋放的堆記憶體;(錯誤未知,有可能產生斷錯誤)
11.當堆記憶體耗盡?
其它:重複free,delete記憶體,程式將收到訊號sigabrt,然後退出。
#include #include #include #include //1.空指標解引用,訪問不存在的記憶體位址
//訪問一段未知、(非法)記憶體
void test_null_pointer()
//傳入不存在的記憶體給strlen
void test_strlen()
{ //int *p = null;
char *p;
cout<
段錯誤?打的就是段錯誤!!
呵,段錯誤?自從我看了這篇文章,我還會怕你個小小段錯誤?請開啟你的linux終端,跟緊咯,準備發車!嘟嘟嘟噠 include void errfunc intmain 這段 拿去執行,肯定段錯誤。系統會在程式崩潰的那一剎那將整個核心的資訊記錄在乙個檔案裡邊。如果你是第一次,那麼ls是查不到的。這樣 ...
段錯誤總結
sigsegv是在訪問記憶體時發生的錯誤,它屬於記憶體管理的範疇 sigsegv是乙個使用者態的概念,是作業系統在使用者態程式錯誤訪問記憶體時所做出的處理。當使用者態程式訪問 訪問表示讀 寫或執行 不允許訪問的記憶體時,產生sigsegv。當使用者態程式以錯誤的方式訪問允許訪問的記憶體時,產生sig...
段錯誤除錯
1 gdb除錯 1 第一步是使用帶有除錯標誌 debugging flags 的方式編譯這段 如下 gcc g segfault.c 2 執行可執行程式 gdb a.out 進入gdb模式 gdb run 執行程式 starting program home dgawd cpsc 363 a.out...