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

Why I get different value for my variable? (C++)

为什么当我在代码末尾添加一些内容时,"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]; */
}
if (A[i]<= 800 && A[i+1] > 800)
i=N-1

时,

A[i+1] 超出范围

未定义的行为

In computer programming, undefined behavior (UB) is the result of executing computer code written in a programming language for which the language specification does not prescribe how that code should be handled. Undefined behavior is unpredictable and a frequent cause of software bugs.

考虑这段代码:

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

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

if (A[N-1]<= 800 && A[N] > 800)

结果为 undefined behaviour

您可以通过更改 for 中的限制来解决此问题,这可能是您在第一种情况下想要的:

for (int i = 1; i < N - 1; i++)

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

if (A[i - 1]<= 800 && A[i] > 800)

如@ivan 提供的答案中所述,问题在于索引不正确。所以,正确的做法是..

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

你没有说代码应该完成什么,但最合理的猜测意味着你应该通过更改来修复未定义的行为和单独的不正确行为:

if (A[i]<= 800 && A[i+1] > 800) {

if (A[i-1]<= 800 && A[i] > 800) {