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