2

在我的代码中,我只是分别扫描 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;
    }

}
4

2 回答 2

2

当 时i = 9000,您最终将在以下语句中访问越界内存。这会导致未定义的行为。

ans[i]=0;
x[i]=0;
y[i]=0;
于 2018-10-22T09:28:47.240 回答
1

经典的“减一”错误。将您的 for 循环更改为:

for(i=0;i<9000;++i){
    ans[i]=0;
    x[i]=0;
    y[i]=0;
}
于 2018-10-22T10:18:17.603 回答