回答:
エラー言ってセグメンテーションフォールト(またはセグメンテーションフォルトを、またはSIGSEGV)Ubuntuと他のUnixライクなオペレーティングシステムで、または言って一般保護違反時にプログラムにアクセスすることができませんメモリの一部にアクセスしようとする試み、またはそのプログラムのWindowsでは、ありますアクセスできません。セグメンテーションフォールトは、プログラムクラッシュの一種、つまりプログラムの異常終了です。詳細については、クラッシュ、メモリ保護、セグメンテーション違反、一般保護違反、およびSIGSEGVに関するWikipediaの記事を参照してください(および、ここで提示されているものよりもトピックに関するテクスチャの理解が深い)。
セグメンテーション違反は、ほとんどの場合、それが発生するプログラムのバグが原因です。セグメンテーション違反のほとんどまたはすべてが同じアプリケーションから発生していると推測しています。マシン上でセグメンテーション違反が発生している状況、およびクラッシュしているプログラムについて詳しく説明してください。また、受け取ったエラーメッセージの完全かつ正確なテキストと、その前に表示されるその他のメッセージも提供してください。これにより、(セグメンテーション障害とは何かに関する一般的な情報ではなく)問題に固有の詳細なアドバイスを提供できるようになります。
この情報を提供する最良の方法は、質問を編集してそれを含めることです。あるいは、この質問を一般的なセグメンテーション違反のみにしたい場合は、セグメンテーション違反の具体的な原因について質問するために新しい質問を投稿できます(これを行う場合は、新しい質問にこれらすべての詳細を必ず入力してください) 。
セグメンテーション違反は、アプリケーションのバグが原因です。技術的には、アプリケーションがメモリに属さない(または存在しない)メモリの一部に対して読み取りまたは書き込みを試みることを意味します。もちろん、他の誰かのメモリを読み書きすることは禁じられており、システム(カーネル)がこれを検出すると、アプリケーションを強制終了します。
アセンブリコードをトレースして問題をデバッグするために使用されていた時代は過ぎ去りました。異常終了、ワトソン博士、セグメンテーション違反。それらの緑の日は過ぎ去りました。
セグメンテーションフォールトの理由の1つは、メモリに直接アクセスするコードが失敗することです。コードが別のアプリケーションのメモリセグメントにアクセスしようとすると、セグメンテーションエラーが発生します。メモリの割り当ては、より大きな連続したメモリブロックが割り当てられるように移動される場合があります。カーネルは回復を試みますが、メモリ情報をすべてファイルに保存し、CPUで実行されているすべてのアプリケーションの現在の状態とその状態(最後の命令実行)をファイルに保存しようとします。また、回復情報をできるだけ多く保存し、できる限り多くのファイルを閉じようとするため、hddがリンク切れにならないようにします。
頻繁に再現できる場合は、デバッグして修正してください。再現できない場合は、手をつないでひざまずいて、「定期的に」見えないように地獄のように祈ってください。
SIGSEGV
ハンドラをSIG_DFL
(コアをダンプして終了するSIGSEGV
)以外に設定することは非常にまれです間違っており、回復はおそらく不可能です。(2)プロセスが停止されると、コアがダンプされます。(3)コアダンプには、ダンプされたプロセスのメモリとレジスタのみが含まれます。(4)他のプロセス、CPUおよびカーネルは、別のプロセスのセグメンテーション違反の影響を受けません。