web-dev-qa-db-ja.com

Linuxのセグメンテーション違反とは何ですか?

Linuxの場合:

セグメンテーション違反とは何ですか?私はそれがプログラムをクラッシュさせることを知っていますが、それはある種のメモリリークの問題なのでしょうか、それとも全く関係のないものでしょうか?また、これらにどのように対処しますか?これは通常、コンピューターのセットアップの問題ですか、それともアプリケーション自体の問題ですか?

また、これは他のOSでも起こりますか?

31
Russel

セグメンテーションフォールトは、プログラムがメモリにアクセスしようとしたときに、オペレーティングシステムによって割り当てられていないか、またはアクセスが許可されていない場合です。

「セグメンテーション」とは、コンピューター上の各プロセスが独自の明確な仮想アドレス空間を持つという概念です。したがって、プロセスAがメモリ位置0x877を読み取るとき、プロセスBが自身の0x877を読み取るときよりも、RAMの物理的位置にあるdifferent.

最新のオペレーティングシステムはすべて、セグメンテーションをサポートおよび使用しているため、すべてがセグメンテーションフォールトを生成する可能性があります。

セグメンテーション違反に対処するには、原因となっているコードを修正します。これは一般に、プログラミングの悪さ、特に境界条件エラー、誤ったポインター操作、または共有ライブラリに関する無効な仮定を示しています。問題のように、セグメンテーション違反はハードウェアの故障が原因である場合がありますが、通常はそうではありません。

27
Borealid

「セグメンテーション違反」とは、プログラムが保護されたメモリまたは無効なメモリにアクセスすることです。通常、不十分なメモリ管理またはバグのあるポインタ操作が原因です。

OSは無効なメモリアクセスを検出し、アプリをクラッシュさせます。

6
John Weldon