セグメントエラー |
辞書:電算用語の基礎知識 計算機OS機能編 (TCOS) |
読み:セグメントエラー |
外語:segmentation fault |
品詞:名詞 |
セグメント(プロセスに割り当てられたメモリー範囲)を超えた範囲に読み書きした際に発生するエラー。セグメンテーションフォルト。
|
概要 |
このエラーは様々な場面で発生するが、原因の検出が難しいことも多い。
エラー発生時にはSIGSEGVシグナルが送信される。標準の動作はコアダンプであり、「セグメントエラー(coreを出力しました)」などと表示して止まる。
特徴 |
不正なポインターへのアクセス |
配列などを定義し、その配列サイズを超えるようなアクセスをしたときに発生する。
しかも問題は、数バイト程度超過して書き込んでもセグメントエラーにならないことがあり、しかしヒープ等の内部管理は破壊されていて誤動作を引き起こす。
int main() { int i, buf[10]; for(i = 0; i <= 20; ++i) { buf[i] = i; } }
動作結果は次の通り
> ./a.out セグメントエラー(coreを出力しました)
strcpyなどの関数で、バッファサイズを超えて長い文字列を複写したような場合も、同様である。
スタックオーバーフロー |
再帰呼び出しが無限ループに陥ってしまったなどの時にスタックが枯渇し、スタックオーバーフローが発生する。
int hoge() { hoge(); } int main() { hoge(); }
動作結果は次の通り
> ./a.out セグメントエラー(coreを出力しました)
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |