为什么我的变量值不同?(C++)

Hac*_*ack -1 c++ debugging codeblocks

当我在代码的末尾添加一些东西时,为什么我得到"k"变量的不同值.k的值是4,但是如果我在注释中添加那么一小部分就会变为5.我想这不会影响任何事情.我错了吗?或者我该怎么做才能解决这个令人讨厌的问题呢?

我的代码(代码:块)

#include <iostream>

using namespace std;

int main()
{
int N = 10;
int A[]={1100, 700, 950, 780, 850, 1050, 750, 950, 950, 700};

int k = 0;
 if (A[0] > 800) { 
    k = 1;
} else {
    k = 0;
}
for (int i = 1; i < N; i++) {
    if (A[i]<= 800 && A[i+1] > 800) {
        k++;
    }
}
cout << k << endl;

/* int max_size = k;
int h[max_size]; */
}
Run Code Online (Sandbox Code Playgroud)

nik*_*par 5

未定义的行为

在计算机编程中,未定义的行为(UB)是执行用编程语言编写的计算机代码的结果,语言规范没有规定应该如何处理该代码.未定义的行为是不可预测的,并且是软件错误的常见原因.

考虑一下这段代码:

for (int i = 1; i < N; i++) {
    if (A[i]<= 800 && A[i+1] > 800) {
        k++;
    }
}
Run Code Online (Sandbox Code Playgroud)

i等于时N - 1,循环内的条件变为:

if (A[N-1]<= 800 && A[N] > 800)
Run Code Online (Sandbox Code Playgroud)

结果导致未定义的行为.

你可以通过在第一种情况下改变你想要的限制来解决这个问题:

for (int i = 1; i < N - 1; i++)
Run Code Online (Sandbox Code Playgroud)

或者通过将循环内的条件更改为:

if (A[i - 1]<= 800 && A[i] > 800)
Run Code Online (Sandbox Code Playgroud)