Catching segfaults em C

Eu tenho um programa que segfaults às vezes de aritmética de ponteiro. Sei que isso acontece, mas não posso verificar facilmente com antecedência se ele falha ou não - é possível "pré-digitalizar" os dados de entrada para ver se eles causam um segfault (que pode ser impossível de determinar), ou posso reinstalá-lo para não usar aritmética de ponteiro, o que exigiria uma quantidade significativamente maior de trabalho, ou posso tentar capturar um segfault. Então, minha pergunta:

1) Como, em C, posso pegar um segfault? Eu seialguma cois no sistema operacional causa um segfault, mas o que um programa C pode fazer no caso de ele sofrer uma falha um pouco mais graciosa do que apenasSegmentation fault?

2) Quão portátil é isso?

Imagino que este seja um comportamento altamente não portável, portanto, se você postar algum código para capturar um segfault, diga-me em que ele funciona. Estou no Mac OS X, mas gostaria que meu programa funcionasse no maior número possível de plataformas e quero ver quais são minhas opções.

E não se preocupe - basicamente tudo o que eu quero fazer é imprimir uma mensagem de erro mais amigável e liberar algunsmalloc()ed memória e depois morra. Não estou pensando em ignorar todos os segfaults que recebo e seguir adiant

questionAnswers(8)

yourAnswerToTheQuestion