#include #include #include #include int a[100]; int *b; static jmp_buf jbuf; int searchR(int *a,int x,int i) { return a[i]!=x ? searchR(a,x,i+1) : i; } void catch(int signum) { printf("Trapped signal %d\n",signum); longjmp(jbuf,1); } void search(int *a,int x) { if (!setjmp(jbuf)) printf("%d at %d\n",x,searchR(a,x,0)); else printf("%d missing\n",x); } main() { int i; signal(SIGBUS,catch); signal(SIGSEGV,catch); for (i=0;i<100;i++) a[i]=10*i; search(a,100); search(a,770); search(a,-1); search(a,-111); search(a,-11111111); b=(int*) malloc(10000*sizeof(int)); for (i=0;i<10000;i++) b[i]=10*i; search(b,1000); search(b,7770); search(b,-1); search(b-100,-1111); }