セグメンテーション違反またはctrl-cをキャッチするために使用するアプリケーションがあります。以下のコードを使用すると、セグメンテーション違反をキャッチできますが、ハンドラーが何度も呼び出されています。どうすればそれらを止めることができますか。参考までに、アプリケーションを終了したくありません。破損したバッファをすべて解放するように注意することができます。
出来ますか?
void SignalInit(void )
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = mysighandler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
sigaction(SIGSEGV, &sigIntHandler, NULL);
}
ハンドラーは次のようになります。
void mysighandler()
{
MyfreeBuffers(); /*related to my applciation*/
}
ここでセグメンテーション障害シグナルの場合、ハンドラーが複数回呼び出されており、明らかなように、 MyfreeBuffers() は既に解放されたメモリを解放するためのエラーを返します。一度だけ解放したいのですが、それでもアプリケーションを終了したくありません。
助けてください。