【问题标题】:Why uninitialized variable print a strange negative value? [duplicate]为什么未初始化的变量会打印一个奇怪的负值? [复制]
【发布时间】:2012-04-28 16:34:52
【问题描述】:

为什么未初始化的变量会打印一个奇怪的负值?

int x;
cout << x << endl;

【问题讨论】:

  • 因为它没有初始化。它是内存中那个位置的任何字节。
  • 基本上 x 指向一个之前可能已被填充的内存位置。您可能会看到该值。
  • 因为该变量实际上是系统内存中某处的位置,除非您将某些内容放入该位置,否则您将获得上次使用该内存位置时留在该位置的任何垃圾.
  • @Wyzard:“不管字节是什么”实际上这也不对。在调试构建期间,编译器可以用某个值(0xcccccccc)填充未初始化的变量。所以单元化变量中有“一些”值,但很难说它会是什么。

标签: c++ variables cout


【解决方案1】:

你在做什么(读取一个未初始化变量的值)是undefined behaviour;任何事情都可能发生,从看起来可以工作,到打印随机值,到崩溃,再到用信用卡购买披萨。

【讨论】:

  • 如果它可以在没有信用卡的情况下给我买披萨,我会经常执行上述程序:P
  • 是的,但是因为它是 UB,所以你无法预测浇头。
【解决方案2】:

uninitialized variable 是一个已声明但在使用前未设置为明确已知值的变量。它会有一些价值,但不是可预测的。

【讨论】:

  • 正式地说,它有一个“不确定的价值”,这意味着即使尝试阅读它也可能会失败(以一种或多或少壮观的方式)。
【解决方案3】:

当变量未初始化时,它会显示“垃圾值”。 这意味着它可以是来自任何地方的任意数字,可能来自另一个正在运行的应用程序或来自大内存池的随机数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多