定義
所謂的段錯誤就是指訪問的內存超出了系統所給這個程序的內存空間,通常這個值是由gd tr來保存的,他是一個48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存 相應于gdt的下標,最后3位包括了程序是否在內存中以及程序的在cpu中的運行級別,指向 的gdt是由以64位為一個單位的表,在這張表中就保存著程序運行的代碼段以及數據段的起 始地址以及與此相應的段限和頁面交換還有程序運行級別還有內存粒度等等的信息。分段錯誤(通常簡稱為段錯誤)是一個特定的錯誤條件,計算機軟件的操作期間發生??傊?,一個分割故障發生在一個程序試圖訪問一個內存位置,它是不允許訪問,或試圖以一種不允許一個內存位置的訪問(例如,試圖寫入只讀位置,或覆蓋操作系統的一部分)。一旦一個程序發生了越界訪問,cpu就會產生相應的保護,于是segmentation fault就出現了通過上面的解釋,段錯誤應該就是訪問了不可訪問的內存,這個內存區要么是不存在的,要么是受到系統保護的,還有可能是缺少文件或者文件損壞。
————以上來自百度百科
斷錯誤產生的原因:
1 訪問不存在的內存地址
#include <unistd.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int *ptr = NULL; *ptr = 0; return EXIT_SUCCESS;}
2 訪問系統保護的內存地址
#include <unistd.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int *ptr = (int *)0; *ptr = 100; return EXIT_SUCCESS;}
3 訪問只讀的內存地址
#include <unistd.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <string.h> int main(int argc, char *argv[]){ char *ptr = "xiyoulinux"; strcpy(ptr, "test"); return EXIT_SUCCESS;}
4 棧溢出
#include <unistd.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>int main(){ main();}
以上這篇linux C編程常見的錯誤總結(必看篇)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答