什么是段錯誤?
一旦一個程序訪問了不可訪問的內存,(這個內存區可能是不存在的,或者是是受到系統保護的,或者是缺少文件或文件損壞。)
cpu 就會產生相應的保護,就會報錯segmentation fault
解決方法(偽)
- 出現段錯誤時,首先應該想到段錯誤的定義,從它出發考慮引發錯誤的原因。
- 在使用指針時:
-
- 定義后:記得初始化指針
-
- 使用時:記得判斷是否為 NULL
- 在使用數組時:
-
- 注意數組是否被初始化
-
- 注意數組下標是否越界
-
- 注意數組元素是否存在
- 在訪問變量,注意變量所占地址空間是否已經被程序釋放掉
- 在處理變量時,注意變量的格式控制是否合理等
常見產生原因
指針相關
- 創建了空指針,試圖訪問它的值
- 非關聯化一個空指針,然后分配(寫一個值到一個不存在的目標)
即:
int *p=NULL; *p=1;
- malloc 動態分配內存,釋放、置空完成后,再使用該指針。
無限遞歸,導致的堆棧溢出
內存越界(數組越界,變量類型不一致等)
訪問不存在的內存地址
比如:
int *p=NULL;
*p=1;
