Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我认为阅读记忆不应该引起任何问题,例如
char *d=""; char *d2="test"; memcmp(d,d2,10);
memcmp() 会失败吗?
memcmp()
您的假设不正确,因为在未映射到进程地址空间的地址处读取内存将导致SEGV. 特别是读取地址 0(在几乎所有架构上),并读取内核内存空间(如果它甚至被映射),但通常读取没有物理内存映射到可读的逻辑内存。
SEGV
在您的示例中,您正在运行memcmp未分配的字节,这是未定义的行为。它可能会从堆栈或数据段中读取垃圾,但您无法知道这一点。例如,d可能正好在堆栈的顶部,因此您可能会越过堆栈顶部进入未映射的内存(堆栈通常向下增长)。
memcmp
d