2017-03-20 6 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回目以降は入力された数値が表示されます。

関連する問題