2017-03-20 12 views

답변

0

신호가 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 차 시도에서 입력 한 번호를 인쇄합니다.