Я столкнулся с проблемой, при которой ошибка сегментации возникает в обработчике ошибок сегментации.Хотя я уже исправил реальную проблему, но все же меня смущает то, что нижеприведенная программа не работает в бесконечном цикле:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void C()
{
int *p = NULL;
*p = 3;
}
void B()
{
C();
}
void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
printf("Came in sigaction.\n");
//if(si)
//printf("Caught segfault at address %p\n", si->si_addr);
B();
}
int main(void)
{
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = segfault_sigaction;
sa.sa_flags = SA_SIGINFO;
sigaction(SIGSEGV, &sa, NULL);
segfault_sigaction(0, NULL, NULL);
return 0;
}
Вывод приведенного выше кода выглядит следующим образом:
Came in sigaction.
Came in sigaction.
Segmentation fault (core dumped)
В комментариях к подобному посту: Ошибка сегментации в обработчике ошибок сегментации некоторые люди отметили, что она должна идти в бесконечном цикле, но это не текущее поведение.Может кто-нибудь объяснить мне, что происходит ??