什么是 SEGV_MAPERR?

Posted

技术标签:

【中文标题】什么是 SEGV_MAPERR?【英文标题】:What is SEGV_MAPERR? 【发布时间】:2010-11-03 06:06:58 【问题描述】:

SEGV_MAPERR是什么,为什么总是想出SIGSEGV

【问题讨论】:

【参考方案1】:

常见的SEGV有两种,这是由于内存访问无效导致的错误:

    访问了具有错误权限的页面。例如,它是只读的,但您的代码试图写入它。这将报告为SEGV_ACCERR。 访问的页面根本没有映射到应用程序的地址空间。这通常是由于取消引用空指针或被小整数值损坏的指针造成的。这被报告为SEGV_MAPERR

SEGV_MAPERR 的排序文档(索引 Linux 源代码)在这里:http://lxr.free-electrons.com/ident?i=SEGV_MAPERR。

【讨论】:

当***.com/a/1000010/358475 更完整、更有帮助时,为什么将其标记为答案? 问题和其他答案比我的答案要老得多。我确实编辑了另一个答案以至少对其进行改进。 了解将这些与 EXC_BAD_ACCESS 异常类型区分开来的情况会很有趣。例如页面是否已映射但未分配(/ 最近已解除分配)? SEGV_MAPERR 的一个例子是堆栈溢出(没有双关语)。 :D 还有更多的SEGV类型:elixir.free-electrons.com/linux/latest/source/include/uapi/…【参考方案2】:

这是一个分段错误。很可能是悬空指针问题,或者某种缓冲区溢出。

SIGSSEGV 是根据问题、分段错误终止它的信号。

检查悬空指针以及溢出问题。

启用核心转储将帮助您确定问题。

【讨论】:

如何启用核心转储?

以上是关于什么是 SEGV_MAPERR?的主要内容,如果未能解决你的问题,请参考以下文章

为啥启用 NEON SIMDization 时 Android 会崩溃?信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

MobileAds.initialize(this) 崩溃 致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

Renderscript 致命信号 11 (SIGSEGV) 代码 1 (SEGV_MAPERR) 故障地址

java.lang.Error:信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) Android 应用

信号11(SIGSEGV),代码1(SEGV_MAPERR),故障地址0x7f4485ff1820

A/libc:致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR),tid 8890 (RenderThread) 中的故障地址 0x20,pid 8833