未分配的变量值

时间:2016-08-03 17:39:15

标签: c++ variables

当我使用代码时:

#include <iostream>

using namespace std;

int main()
{

    while(1) {
        int a;
        if(a != 0) {
            cout << a << endl;
            break;
        }
    }

    return 0;
}

该计划永远不会停止。

我了解到未分配的变量存储了内存中特定位置的内容。   为什么a的值始终为0?

也许是因为我的大内存容量还是仅仅是编译器? 我使用GNU编译器C ++ 11 我使用Release构建配置。 我也是这种语言的新手。

编辑: 我使用g ++编译器,得到了答案。

3 个答案:

答案 0 :(得分:4)

读取未初始化的变量是&#34;未定义的行为&#34; - 意思是&#34;任何事情都可能发生,你的编译器可以随意做任何事情&#34; (而不仅仅是有问题的变量,实际上是你的整个程序)。

不要在程序中调用未定义的行为。或遭受(不可预测的)后果。

答案 1 :(得分:3)

这取决于编译器和选项。您正式拥有不确定值。但是g ++编译器倾向于将这些变量设置为0。

考虑机器代码级别发生的情况,如果第一次执行通过声明时a为0,则程序中没有任何内容可以合理地导致该内存位置中的值发生更改,因此然后你得到一个无限循环。

然而,在源代码级别,使用该不确定值(包括仅检查它)会产生正式的未定义行为,其中可能发生任何事情或任何事情,包括预期会发生的事情。 :)

答案 2 :(得分:2)

当你没有为变量赋值,然后引用它时,程序的行为没有被定义为该值可能是那个内存位置的运气垃圾。在你的情况下,幸运的是它始终为零。如果您更改操作系统/编译器/编译器选项,甚至更改操作系统中正在发生的操作,您可能会得到不同的结果。