C / C ++中的垃圾值

可能重复:
未初始化的变量如何获得垃圾值?

如何在C和C ++中生成垃圾值? 编译器是否使用一些随机数生成技术来生成垃圾值?

如果您指的是未初始化变量的值,则不会生成这些值。 他们只是在那个记忆位置发生的垃圾。

int *foo = new int; std::cout << *foo << std::endl; 

New返回指向内存中某个地址的指针。 RAM的这一点一直存在; 之前没有办法知道那里存储了什么。 如果只是从操作系统请求它,它可能是0(操作系统将在出于安全原因将它们输出之前擦除存储器块)。 如果它以前被您的程序使用过,谁知道。

实际上,使用未初始化变量的结果是不确定的。 您可能会收到一个不可预测的数字,您的程序可能会崩溃,或者更糟。

即使您知道在您的平台上运行上述内容也是安全的,您也不应该依赖于给出随机值。 它会显得随机,但实际上可能比您想要的更具可预测性和可控性。 此外,分布将远远不够均匀。

如果“垃圾值”表示未初始化变量的值,则表示未 – 未初始化变量的值未被标准定义。 您正在考虑的垃圾值实际上就是在从堆栈或堆中分配变量的存储之前正好存储在该内存中的任何内容。

也就是说,一些编译器提供调试辅助工具,用一些众所周知的“幻数”来填充未初始化的变量,以帮助您捕获此类错误。 例如,Microsoft Visual C ++使用0xCCCCCCCC填充未初始化的堆栈变量。 这些是特定于编译器的,通常要求在打开调试时进行编译。

你的程序碰巧使用的记忆在一些状态下出现,由电子在加电时流动的方式,硅藻的有趣特性,以前记忆中的东西,有时是宇宙射线控制。

它不是随机的,但很难预测。