C++ 中意外的 long long 值
Unexpected long long value in C++
在我的代码中,我简单地分别扫描了 t、n 和 m 的值。在调试时我发现无论我给 m 什么值,它都取值 0。你可以 运行 这个代码输入 :
1
3 4
这里,输出应该是4,没想到是0。
另一方面,当我在 for 循环之后扫描 n 和 m 的值时,输出如预期的那样(即在本例中为 4)。我已经注释掉了那一行,这样你们就可以弄清楚为什么会这样。
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long t,n,m,i,j;
scanf("%lld",&t); // Scan t (of no use)
while(t--){
scanf("%lld %lld",&n,&m); // If I scan n and m here, the
//output is always 0
long long x[9000],y[9000],ans[9000],in=0;
for(i=1;i<=9000;i++){
ans[i]=0;
x[i]=0;
y[i]=0;
}
//scanf("%lld %lld",&n,&m);//Output is correct if I scan the values here
cout<< m << endl;
}
}
当i = 9000
时,您将在以下语句中访问越界内存。这会导致 undefined 行为。
ans[i]=0;
x[i]=0;
y[i]=0;
经典“off by one”错误。
将 for 循环更改为:
for(i=0;i<9000;++i){
ans[i]=0;
x[i]=0;
y[i]=0;
}
在我的代码中,我简单地分别扫描了 t、n 和 m 的值。在调试时我发现无论我给 m 什么值,它都取值 0。你可以 运行 这个代码输入 :
1
3 4
这里,输出应该是4,没想到是0。 另一方面,当我在 for 循环之后扫描 n 和 m 的值时,输出如预期的那样(即在本例中为 4)。我已经注释掉了那一行,这样你们就可以弄清楚为什么会这样。
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long t,n,m,i,j;
scanf("%lld",&t); // Scan t (of no use)
while(t--){
scanf("%lld %lld",&n,&m); // If I scan n and m here, the
//output is always 0
long long x[9000],y[9000],ans[9000],in=0;
for(i=1;i<=9000;i++){
ans[i]=0;
x[i]=0;
y[i]=0;
}
//scanf("%lld %lld",&n,&m);//Output is correct if I scan the values here
cout<< m << endl;
}
}
当i = 9000
时,您将在以下语句中访问越界内存。这会导致 undefined 行为。
ans[i]=0;
x[i]=0;
y[i]=0;
经典“off by one”错误。 将 for 循环更改为:
for(i=0;i<9000;++i){
ans[i]=0;
x[i]=0;
y[i]=0;
}