意外更改C ++常量整数

时间:2014-09-09 07:57:52

标签: c++

变量steady_counter初始化为常数。

cout<< steady_counter;

只要我在上面的代码之前的任何地方都有上述语句,该函数就会按预期运行,并检查整数输入是否是一个周期数。

问题是当cout行不存在时,常量整数在下面的if语句中发生变化。我在输入if-else之前打印了steady_counter,然后在if-else之后测试了这个。

没有cout线,steady_counter会变为4位数字。

    for (int i = 0; i < 10; i++)
    {
        if (CheckArr[i])
        {
            num_of_unique++;
        }
    }

    if ((steady_counter == num_of_unique) & (final == NumArr[0]) )
    {
        return true;
    }
    else
    {

        return false;
    }
}

知道发生了什么事吗?为什么我需要一条cout线来维持常数integer_counter?

1 个答案:

答案 0 :(得分:2)

一个明显的问题:

for (int i = counter; i > 0; i --)
    NumArr[i] = -1;

这包括从1counter的值;而NumArr的有效索引则从0counter-1。所以你在阵列外面写字,腐蚀别的东西;可能是另一个局部变量。

更正索引中的逐个错误

NumArr[i-1] = -1;

或使用更规范的循环

for (int i = 0; i < counter; ++i)

或者,对于更多C ++风格,

std::fill(NumArr, NumArr+counter, -1);

可能存在进一步的错误,使用调试器比通过要求人们阅读所有代码更好地找到错误。