una possibile soluzione in C
in C++ la stessa cosa si può fare con la gestione mediante blocchi try catch.codice:#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <setjmp.h> static jmp_buf env; void bad() { char* a = (char*)0xa0000; printf("inside bad()\n"); *(a) = 100; } /* funzione che gestisce i segnali da catturare */ void sighand(int signo) { if (signo == SIGSEGV) printf("SIGSEGV captured & handled\n"); /* salta nella riga in blu e fa in modo che setjmp() restituisca 1 */ longjmp(env, 1); } int main(void) { signal(SIGSEGV, sighand); /* abilita la cattura del segnale SEGMENTATION FAULT */ /* la prma volta setjmp() restituisce 0 */ if (setjmp(env) == 0) { bad(); printf("bad() test passed!\n"); } else printf("very bad() function!\n"); return 0; }

Rispondi quotando