c - C 中变量的垃圾值是如何生成的?

标签 c variables initialization undefined-behavior

我的意思是问它是否遵循某种特定的算法并且实际上不是垃圾。

换句话来说,“垃圾”值究竟是如何存在的?考虑不调用UB,如果读取到垃圾值,该值的来源是什么?

最佳答案

该标准没有提到“垃圾”一词,而是提到了“不确定/不确定值”。该值可以是任意注意

从用户的角度来看,如果我们无法修复某个值(对于任何变量),那么“期望”在任何时候都不会匹配,并且我们得到的值(如果)没有任何用处,因此将它们称为“垃圾”是很常见的。

最相关和最常见的观察/实现是,对于未初始化的自动变量,仅分配存储空间,而不会触及该存储空间的内容。因此,它可能仍然包含放在那里的最后存储的值。现在,该值可能在其他(先前)场景中是有效的,但在当前情况下没有任何意义,因此在当前场景中它是“垃圾”。

TL;DR“垃圾”值不会生成,大多数情况下,它只是该内存位置中最后存储的值。

<小时/>

注意:

相关引用来自 C11,第 §6.7.9 章

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. [....]

<小时/>

§§ 附加阅读:

这与主题密切相关,因此将其添加为脚注。

如果存在一个变量,它具有不确定的值并且

  • 数据类型可以有陷阱表示
  • 未获取变量的地址

然后,尝试读取该值实际上会导致 undefined behavior 。请注意。

关于c - C 中变量的垃圾值是如何生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43883761/

相关文章:

需要常量表达式

java - 使用 protected 构造函数匿名初始化类

c -++*p++ 不适用于数组中的第二个元素?

c - 如何检查 fortran real 是否与 C float 兼容?

c - 我必须对代码进行哪些更改才能对负数进行排序?

c++ - 在C++中,对象(如队列、映射)的名称是引用(还是指针)?

c - memsetting 数组中的元素是否正确?

Windows 路径变量

c++ - unique_ptr 无法初始化

c - C中的三元搜索树,指向结构体指针的问题