Linux: SEGVをハンドルする

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>

void trap(int no) {
  printf("signal: %d\n", no);
  exit(1);
}

int main() {
  struct sigaction sa;
  int *n;

  memset(&sa, 0, sizeof(struct sigaction));
  sa.sa_handler = trap;

  if(sigaction(SIGSEGV, &sa, NULL) != 0) {
    perror("sigaction(2)");
    exit(1);
  }

  puts("loop...");

  while(1) {
    // 例のコード
    *n = 5;
    sleep(1);
  }

  return 0;
}