什么是 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