0
나는 질문을 받았는데, 방금 SIGSEVG 신호를 일으킨 포인터에 메모리를 할당하는 방법을, 신호 처리기를 사용하여 할 수 있습니까?어떻게 신호 처리기를 사용하여 세분화 오류를 일으키는 변수에 적절한 메모리를 동적으로 할당합니까?
나는 질문을 받았는데, 방금 SIGSEVG 신호를 일으킨 포인터에 메모리를 할당하는 방법을, 신호 처리기를 사용하여 할 수 있습니까?어떻게 신호 처리기를 사용하여 세분화 오류를 일으키는 변수에 적절한 메모리를 동적으로 할당합니까?
신호가 SIGSEGV 신호로 인해 프로그램이 종료됩니다. 그러나, 당신이 묻는 무엇을 할 수 있지만 메모리 위반이 발생한 후 프로그램 실행을 계속할 이유가 표시되지 않습니다.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <malloc.h>
int *p;
void sighandler(int);
int main()
{
signal(SIGSEGV, sighandler);
printf("\nProcess %d waits for someone to send it SIGSEGV\n",
getpid());
scanf("%d", p);
printf("%d", *p);
return 0;
}
void sighandler(int signum)
{
p = malloc(sizeof(int));
printf("\n\nProcess %d got signal %d\n\n", getpid(), signum);
signal(signum, SIG_DFL);
main();
}
그러나 여전히 SIGSEGV가 발생하지만 2 차 시도에서 입력 한 번호를 인쇄합니다.