Tengo un programa que segfaults de aritmética de puntero a veces. Sé que esto sucede, pero no puedo verificarlo con anticipación para ver si se segmenta o no, o puedo "preescanear" datos de entrada para ver si causará una segfault (que puede ser imposible de determinar), o puedo reajustarlo para que no use la aritmética del puntero, lo que requeriría una cantidad de trabajo significativamente mayor, o puedo intentar atrapar un segfault. Entonces mi pregunta:Captura de segfaults en C
1) ¿Cómo, en C, puedo atrapar un segfault? Sé algo en el sistema operativo provoca una segfault, pero ¿qué puede hacer un programa C en el caso de que segfaults a morir un poco más elegante que simplemente Segmentation fault
?
2) ¿Qué tan portátil es esto?
Imagino que este es un comportamiento muy pocoportable, por lo que si publica un código para atrapar un segfault, dígame en qué funciona. Estoy en Mac OS X pero me gustaría que mi programa funcione en tantas plataformas como pueda y quiero ver cuáles son mis opciones.
Y no se preocupe: básicamente, todo lo que quiero hacer es imprimir un mensaje de error más fácil de usar y liberar algo de memoria malloc()
ed, y luego morir. No estoy planeando ignorar todos los segfaults que obtengo y avanzo.
Imprime el mensaje de error; no libere la memoria, ya que es probable que su sistema de memoria esté codificado cuando ocurre la falla seg. –