【问题标题】:Can we store values to a null location?我们可以将值存储到空位置吗?
【发布时间】:2020-05-16 08:06:52
【问题描述】:

所以我正在使用链表,我想到如果我们可以将对象的值存储到空位置。

另外,如果我们不能将值存储到空位置,为什么会这样?(因为在 c++ 中,当我们将 0 分配给指针时,它会被指向空。)

【问题讨论】:

  • 你可以试试。提示:它会导致崩溃。
  • 那个内存位置是只读的。
  • @HolyBlackCat 有些小型系统没有内存保护或分页。此外,通过优化编译器,甚至无法保证访问被尝试。它可能会被修剪。
  • 这是一个纯理论问题还是您有实际需要这样做?
  • void (*ptr)() = 0; ptr(); - 看到已经重置微控制器的代码 - 不会认为它是干净的,而是供应商自己的代码......另一方面,如果我们考虑这样的 µC,写入地址 0 可能在系统运行时有效,但很可能在下次启动或重置时绝对致命!

标签: c++ pointers data-structures linked-list c++14


【解决方案1】:

草率地说,NULLnullptr 是指向无处的指针的占位符值。您不能在任何地方存储值。如果你尝试这样的事情:

int* p = nullptr;
*p = 5;

你的程序很可能会崩溃(不能保证,事实上如果你这样做了会发生什么是不确定的)。

int* 不存储int。它可以指向一个持有值的int。要存储int,您需要一个int 对象,而不仅仅是一个指针:

int x = 0;
int* p = &x;
*p = 42;

【讨论】:

    【解决方案2】:

    我们可以将值存储到空位置吗?

    您只能将值存储到对象中。对象只能在分配的内存中创建。不能随意指定要分配的内存地址。

    我想理论上,语言实现可能会选择将一个静态存储持续时间的对象存储到表示空指针值的地址中。在这种情况下,对象将存储在“空位置”中。这不会很典型。

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 1970-01-01
      • 2011-01-21
      • 2017-05-27
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      相关资源
      最近更新 更多