Обработка ошибок сегментации

У меня есть приложение, которое я использую, чтобы поймать любую ошибку сегментации или ctrl-c. Используя приведенный ниже код, я могу обнаружить ошибку сегментации, но обработчик вызывается снова и снова. Как я могу остановить их. К вашему сведению, я не хочу выходить из своего приложения. Я просто могу позаботиться об освобождении всех поврежденных буферов.

Возможно ли это?

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);

}

и обработчик выглядит следующим образом.

void mysighandler()
{
MyfreeBuffers(); /*related to my applciation*/
}

Здесь для сигнала ошибки сегментации обработчик вызывается несколько раз, и, как очевидно, MyfreeBuffers() выдает мне ошибки при освобождении уже освобожденной памяти. Я просто хочу освободиться только один раз, но все равно не хочу выходить из приложения.

Пожалуйста, помогите.

33
задан user1225606 18 April 2012 в 05:00
поделиться