SEGV_MAPERRとは何ですか?


回答:


197

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

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

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


8
これがより完全で役立つのに、なぜstackoverflow.com/a/1000010/358475が答えとしてマークされているのですか?
OldPeculier 2015

2
質問と他の答えは私の答えよりずっと古いです。私は少なくともそれを改善するために他の答えを編集しました。
ahcox 2015

これらをEXC_BAD_ACCESS例外タイプと区別する状況を知ることは興味深いでしょう。たとえば、ページはマップされていますが、割り当てられていません(/最近割り当てが解除されています)?
Bobjt 2016年

5
一例SEGV_MAPERRはスタックオーバーフローです(しゃれは意図されていません)。:D
Antti Haapala 2016


40

セグメンテーション違反です。おそらく、ダングリングポインタの問題、またはある種のバッファオーバーフローです。

SIGSSEGV 問題、セグメンテーション違反に基づいてそれを終了する信号です。

ダングリングポインタとオーバーフローの問題を確認してください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.