我的意思是问它是否遵循某种特定的算法并且实际上不是垃圾。
换句话来说,“垃圾”值究竟是如何存在的?考虑不调用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/