#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;
}
段错误原理:“Segmentation fault: 11“(九)
于 2019-01-09 17:45:31 首次发布