Tengo una aplicación que utilizo para detectar cualquier falla de segmentación o ctrl-c. Utilizando el siguiente código, puedo detectar el error de segmentación, pero el controlador se llama una y otra vez. ¿Cómo puedo detenerlos? Para su información, no quiero salir de mi aplicación. Solo puedo cuidar de liberar todos los búferes corruptos.Manejo de falla de segmentación
¿Es posible?
void SignalInit(void)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = mysighandler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
sigaction(SIGSEGV, &sigIntHandler, NULL);
}
y manejador va así.
void mysighandler()
{
MyfreeBuffers(); /*related to my applciation*/
}
Aquí para la señal de error de segmentación, manejador está siendo llamado varias veces y MyfreeBuffers tan obvios() me da errores para liberar la memoria ya liberada. Solo quiero liberar una vez pero aún no quiero salir de la aplicación.
Por favor ayuda.
Esta es una buena solución. No me gustó especialmente el "déjalo colapsar y luego analicé el volcado del núcleo". – dturvene