Segmentation fault 這個提示仍是比較常見的,這個提示就是段錯誤,這是翻譯仍是十分恰當的。數組
Core Dump 有的時候給咱們呈現的翻譯頗有趣是」吐核「,可是實際上比較貼切的翻譯是核心轉儲(是操做系統在進程收到某些信號而終止運行時,將此時進程地址空間的內容以及有關進程狀態的其餘信息寫出的一個磁盤文件。這種信息每每用於調試),這個「吐核」的產生和王安博士有着一些關聯,其實「吐核」這個詞形容的很恰當,就是核心內存吐出來。安全
出現這種錯誤可能的緣由(其實就是訪問了內存中不該該訪問的東西):多線程
1,內存訪問越界:函數
(1) 數組訪問越界,由於下標出超出了範圍。spa
(2) 搜索字符串的時候,經過字符串的結尾符號來判斷結束,可是實際上沒有這個結束符。操作系統
(3)使用strcpy, strcat, sprintf, strcmp,strcasecmp等字符串操做函數,超出了字符中定義的能夠存儲的最大範圍。使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函數防止讀寫越界。線程
2,多線程程序使用了線程不安全的函數。翻譯
3,多線程讀寫的數據未加鎖保護。指針
對於會被多個線程同時訪問的全局數據,應該注意加鎖保護,不然很容易形成核心轉儲調試
4,非法指針
(1)使用NULL指針
(2)隨意使用指針類型強制轉換,由於在這種強制轉換實際上是很不安全的,由於在你不確認這個類型就應該是你轉化的類型的時候,這樣很容易出錯,由於就會按照你強制轉換的類型進行訪問,這樣就有可能訪問到不該該訪問的內存。
5,堆棧溢出
不要使用大的局部變量(由於局部變量都分配在棧上),這樣容易形成堆棧溢出,破壞系統的棧和堆結構,致使出現莫名其妙的錯誤。