唯一のことは、SIGSEGV
信号のための独自のシグナルハンドラを記述しています。この信号は、このプロセスによって引き起こされた不適切なメモリ参照が発生するたびに、OSによってプロセスに送信されます。
最小限のドラフトコードがここに用意されています。 signal
関数は、マンページによって非推奨と宣言されており、代わりにsigaction
を使用することをお勧めします。
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
void handle_sigsegv(int sig)
{
fprintf(stderr,"segment\n");
// do something else here...
_exit(1);
}
int main(void)
{
struct sigaction s;
sigset_t sst;
sigemptyset(&sst);
s.sa_handler = handle_sigsegv;
s.sa_mask = sst;
s.sa_flags = 0;
if(sigaction(SIGSEGV, &s, NULL) != 0)
{
perror("sigaction");
return 1;
}
*((int*)0) = 3579; // this fails, invoking the handler
return 0;
}
質問をするのを忘れました。何を試しましたか?あなたはどんな問題を抱えていますか?どんな助けが必要ですか? –
また、あなたが話している言語でタグ付けするのを忘れてしまった。 – geoffspear
http://stackoverflow.com/a/2436368/690032 – sverre