У меня есть приложение, которое я использую, чтобы поймать любую ошибку сегментации или 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() дает мне ошибки для освобождения уже освобожденной памяти. Я просто хочу освободить только один раз, но все равно не хочу выходить из приложения.
Пожалуйста, помогите.