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