#include <stdio.h> #include <signal.h> #include <setjmp.h> jmp_buf buf; void handler(int s) { if(s==SIGSEGV) printf("now got a segmentation violation signal/n"); if(s==SIGILL) printf("now got an illegal instruction signal/n"); longjmp(buf,1); } int main() { if(setjmp(buf)) { printf("back in main/n"); exit(1); } int *p=NULL; signal(SIGSEGV,handler); signal(SIGILL,handler); *p=0; return 0; } 这是《C专家编程》上的代码。