セグメンテーション違反単語

セグメンテーションイハン
1.1千文字の記事
  • 5
  • 0pt
掲示板へ

セグメンテーション違反とは、プログラムエラーの一つである。シグナル名に由来して短くSEGVともいう。 セグメンテーションフォルト。segfault。一般保護違反。

概要

簡単に言うとプログラムメモリの変なところを操作しようとするとこのエラー(例外)が発行される。 これをやってしまったプログラムは、SIGSEGVというシグナルがOSカーネルから送信され、「セグメンテーション違反です」などという メッセージとともに落ちる。これを連発するプログラムは品質が低いと言うことになる。

かつて全世界人間恐怖に陥れたブルースクリーンはだいたいこれが原因である。 最近ではこなれてきてシステム全部がだめになると言うことは少なくなったが、 「問題が発生したため、xxx を終了します。ご不便をかけて申し訳ありません。」というふざけたメッセージで 利用者を不愉快にさせるのは変わりない。

プログラムバグによって起こるエラーなので、利用者側ではこれを直すことができない。 できることといえば、開発者にバグ修正を依頼、SEGVが起こる機を使わないということぐらいしかない。

具体的には以下のような状況でSEGVが起こる:

SEGVはこのような細なミスで起こる。このためメモリ周りのバグは見つけにくく、機追加や仕様変更を繰り返していくとどこでどうやってバグが引き起こされたのかがすぐにわからなくなってしまうことがしばしばある。 まずSEGVが起こった状況と原因から特定していかないといけないため、動作環境を少しずつ変えながらステップ実行を行うという単調な作業を繰り返すハメになる。これで開発者はうんざりしてやる気がなくなってしまい、仕様ということにしたり、最後には投げ出してしまうことも多い。というわけでバグ報告をするときは、動作環境再現方法を書いてもらえるととても助かるんです。

以下は効なメモリ領域を操作することによってSEGVを起こす簡単なサンプル。

int main(void) {
    int *p;
    *p = 1;
    /* この時点でpはどこをしているかわからないのでおそらくSEGVになる。 */
    return 0;
}


 

関連動画

関連コミュニティ

関連項目

【スポンサーリンク】

  • 5
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

夢前月夜 (単) 記事と一緒に動画もおすすめ!
提供: 石野 蒼
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

セグメンテーション違反

12 ななしのよっしん
2012/09/29(土) 23:49:01 ID: 48X96deYwp
↓ こういうイメージ

道路を走っているクルマうっかり中央線をえた間に
どこからともなくマシンガンが出現し、
そのクルマの巣にして爆破するという
高度な管理機
👍
高評価
0
👎
低評価
0
13 ななしのよっしん
2013/03/12(火) 19:09:27 ID: 48X96deYwp
SEGV を防ぐ上で有効な対策は C言語機械語を使わないこと

という最も重要な記述がぬけているな
👍
高評価
0
👎
低評価
0
14 ななしのよっしん
2014/01/08(水) 01:43:25 ID: twnz0WFkV6
C言語アセンブリ言語使いまくるの楽しいやろ!
👍
高評価
0
👎
低評価
0
15 ななしのよっしん
2014/02/15(土) 02:53:42 ID: lOVhAVe/++
残念なことに私はHaskellでもSegvを起こした記憶がある
コードは忘れた
👍
高評価
0
👎
低評価
0
16 ななしのよっしん
2014/02/17(月) 16:54:34 ID: pI/WFkM/rF
👍
高評価
0
👎
低評価
0
17 ななしのよっしん
2014/11/07(金) 14:22:59 ID: XMh9Jr261Z
👍
高評価
0
👎
低評価
0
18 ななしのよっしん
2020/03/29(日) 19:27:50 ID: sjZ2FWd/VN
なにのげ
👍
高評価
0
👎
低評価
0
19 ななしのよっしん
2020/03/29(日) 19:30:58 ID: sjZ2FWd/VN
の書き込みしちまったorz

何の言を採用したところでセグメンテーション違反からは逃れられない
直接触っている場所でわかりやすく起きないだけで、その言CPUとの間にある色々なものの中で起きるときは起きる
大体は採用するライブラリの「食い合わせが悪い」とかそんなので
👍
高評価
0
👎
低評価
0
20 ななしのよっしん
2022/03/19(土) 22:24:11 ID: gTFvDj/yk7
例えばJavaなら、ユーザープログラムセグメンテーション違反を直接引き起こす可性は極めて低いかもしれない。
ただし、セグメンテーション違反は発生しなくても、nullアクセスすればNullPointerExceptionが、配列外にアクセスすればArrayIndexOutOfBoundsExceptionが発生してプログラムが止まるかもしれない。
結局、あるべきエラーチェックや例外処理がきちんとプログラムで行われているかが重要であって、セグメンテーション違反を回避するために言を選択するという行為は本質的な対策にはならないと言わざるを得ない。
👍
高評価
0
👎
低評価
0
21 ななしのよっしん
2023/02/27(月) 12:01:11 ID: EXbjtZ7OJm
ElmとかRust(unsafeはなし)みたいながかなり厳重な言だとそういう類のエラーは弾けるのでは?
👍
高評価
0
👎
低評価
0

ニコニコニューストピックス