解放されたアドレスを使用しようとするプログラムがあります。これにより競合が発生します。私の考えでは、Linuxが誤った動作のためにプログラムを終了するので、これが起こると思います。解放されたメモリにアクセスすると警告メッセージが表示され、プログラムの実行が続く快適な環境でプログラムを実行する方法はありますか?
ベストアンサー1
プロセスは、1970年代からUNIXカーネルに存在していた「シグナル」という機能によって終了します。違法なメモリにアクセスするためにプロセスが受信した信号は、SIGSEGV(Segmentation Violation)です。
ほとんどのシグナルはシャットダウンを引き起こしますが、プログラムは特定のタイプのシグナルを無視するか、シグナルが転送されるとシグナル処理ルーチンを実行するかを選択できます。すべての信号を無視または処理することはできませんが、SIGSEGVは可能です。
これはマニュアルページに文書化されています信号(2)そして信号(7)。しかし、質問にC ++でタグ付けしました。おそらくC ++には、signal
これを行うための独自のシステムコールベースのメカニズムがあります。
この記事を書いた後、StackoverflowでSIGSEGVをキャプチャするC ++プログラムを見つけました。https://stackoverflow.com/a/918891/3548109。