读取内存会发生分段错误吗?

Zxc*_*Mnb 3 c segmentation-fault memcmp

我认为阅读记忆不会引起任何问题,例如

char *d="";
char *d2="test";
memcmp(d,d2,10);
Run Code Online (Sandbox Code Playgroud)

memcmp() 失败吗?

abl*_*igh 5

您的假设是不正确的,因为在未映射到进程地址空间的地址处读取内存将导致a SEGV.特别是读取地址0(几乎在所有体系结构上),并读取内核内存空间(如果它甚至映射在其中),但一般读取逻辑内存,没有物理内存被映射为可读.

在您的示例中,您运行的memcmp是未分配的字节,这是未定义的行为.它可能会从堆栈或数据段中读取垃圾,但您无法知道这一点.例如,d可能正好在堆栈的顶部,因此您可能会超出堆栈顶部到未映射的内存(堆栈通常向下增长).