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

时间:2014-03-05 19:37:26

标签: c segmentation-fault memcmp

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

char *d="";
char *d2="test";
memcmp(d,d2,10);

memcmp() 可以失败吗?

1 个答案:

答案 0 :(得分:5)

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

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