Segmentation Fault中'code'的含义是什么?

mic*_*ael 9 linux android

我在android中看到了这2个分段错误.一个说SEGV_MAPERR,另一个说SEGV_ACCERR.

你能告诉我这两个有什么区别吗?

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 41963214

signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 4006e000
Run Code Online (Sandbox Code Playgroud)

谢谢.

Tom*_*mmy 14

siginfo.h:

SEGV_MAPERR表示您尝试访问未映射到任何内容的地址.

SEGV_ACCERR表示您尝试访问您无权访问的地址.

因此,在这两种情况下,您都访问了一个您不应该拥有的地址,这可能是您的实际代码唯一有害的地址.在前一种情况下,无论如何在该地址范围内都没有记忆.在后一种情况下,该地址范围内有内存,但您不拥有它.

如果您要访问一个随机地址,那么您获得的取决于操作系统在当时如何设置您的流程.