段錯誤原理:"Segmentation fault: 11"
阿新 • • 發佈:2019-01-10
#include <signal.h> #include <setjmp.h> #include <stdarg.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> //訊號處理函式 void recvSignal(int sig) { sleep(1); printf("received signal %d !!!\n",sig); } int main(int argc,char** argv) { /* 1.給SIGSEGV訊號註冊一個處理函式,替代了系統預設的產生core檔案的處理函式,當錯誤發生後 ,系統傳送SIGSEGV,然後中斷了程式跳到recvSignal()中處理完成後,再跳回來錯誤發生的地方, 然後繼續產生錯誤,繼續傳送SIGSEGV訊號 */ signal(SIGSEGV, recvSignal); /* 1)訪問系統資料區,向系統保護的記憶體地址寫資料最常見就是給一個指標以0地址 2)記憶體越界(陣列越界,變數型別不一致等) 訪問到不屬於你的記憶體區域 */ //訪問沒有許可權的地址 //int *s = 0x0120; char *s = 123; printf("s == %x\n",*s); return 0; }