web-dev-qa-db-ja.com

SEGV_MAPERRとは何ですか?

SEGV_MAPERRとは何ですか、なぜ常にSIGSEGVになりますか?

69
Geek

一般的な2種類の [〜#〜] segv [〜#〜] がありますが、これは無効なメモリアクセスに起因するエラーです。

  1. 間違った権限を持つページにアクセスしました。たとえば、読み取り専用でしたが、コードが書き込みを試みました。これは SEGV_ACCERR として報告されます。
  2. アプリケーションのアドレス空間にまったくマップされていないページにアクセスしました。これは、nullポインターまたは小さい整数値で破損したポインターを逆参照した結果としてよく発生します。これは SEGV_MAPERR として報告されます。

SEGV_MAPERRの並べ替え(インデックス付きLinuxソースコード)のドキュメントは次のとおりです。 http://lxr.free-electrons.com/ident?i=SEGV_MAPERR

167
ahcox

これはセグメンテーション違反です。おそらく、宙ぶらりんのポインターの問題、または何らかの種類のバッファーオーバーフローです。

SIGSSEGVは、問題、セグメンテーションフォールトに基づいて終了する信号です。

ダングリングポインターとオーバーフローの問題を確認します。

コアダンプを有効にすると、問題の特定に役立ちます。

38
Sev