3

例如,我们有

int* p;

这个指针是否可以随机初始化为0,即操作系统初始化,这种情况下我们不改变这个指针的值吗?

4

3 回答 3

2

这是棘手的部分:没有有效的程序可以解决这个问题。阅读p是未定义的行为,任何事情都可能发生,包括返回nullptr,即使p实际上不包含nullptr(!)

如果您想知道这怎么可能,p可以在第一次写入时放入寄存器。在此之前尝试阅读p会产生相当随机的结果。

于 2015-02-24T08:28:52.687 回答
0

假设:您正在谈论 malloc 或 new 的返回在某个时候应该为 0 的可能性。

在这种情况下,我相信答案是否定的。指针将采用虚拟地址。作为动态分配的东西,它将获得一个属于的地址,该地址永远不会从地址 0 开始。

进程的虚拟内存空间被划分为多个部分:文本、数据、BSS、堆(所有动态分配的对象所在的位置)、堆栈和内核空间。下图适用于 32b 操作系统,但对于 64b,图片类似。

你可以做一个小程序,读取不同空间的一些地址,了解哪些可以访问,哪些不能访问。

在此处输入图像描述

堆(指针指向的地方)在文本、数据和 BSS 段之后增长。所以它永远不会是 0

于 2015-02-24T18:42:55.670 回答
-1

将变量声明为全局或静态将由操作系统自动初始化为 0X0。

于 2015-02-24T06:25:29.993 回答