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)
在计算机编程中,未定义的行为(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)