una possibile soluzione in C

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;
}
in C++ la stessa cosa si può fare con la gestione mediante blocchi try catch.