1. 程式人生 > >段錯誤原理:"Segmentation fault: 11"

段錯誤原理:"Segmentation fault: 11"

#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;
}