此代码中运行时错误的原因是什么?

时间:2017-05-29 08:30:28

标签: c++ runtime-error

我试图解决在线法官的问题(https://www.codechef.com/LOCMAY17/problems/LOC172)。以下是问题的代码。当我提交判断时给出运行时错误()。 所有的变量都被用于约束。请帮我找出问题所在? 代码如下:

#include<iostream>
#include<stdlib.h>
using namespace std;
main()
{
long long int h,w;
while(1)
{
    cin>>h>>w;
    if(h==-1 && w==-1)
        exit(1);
    int n,i,j;
    cin>>n;
    long long int arr[n][4];
    for(i=1;i<=n;i++)
    {
        cin>>arr[i][1]>>arr[i][2]>>arr[i][3];
        arr[i][4]=0;
    }

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if((llabs(arr[j][2]-arr[i][2]))<=arr[j][3])
                arr[i][4]++;
        }
    }
    long long int max=arr[1][4];
    for(i=2;i<=n;i++)
    {
        if(arr[i][4]>max)
            max=arr[i][4];
    }
    cout<<max<<endl;
}
}

我是这个网站的初学者,提前谢谢。

1 个答案:

答案 0 :(得分:1)

很难在未编译的代码上找到运行时错误...

这是无效的

long long int arr[n][4];

因为你这样做:

int n,i....

n 实际上必须是 编译时 常量,这只是因为C ++不允许使用可变长度数组

如果说,数组是0个基本索引数据容器,所以这里引起了一个UB:

for (i = 1; i <= n; i++)

因为您将索引0处的元素保留原样并写入数组范围之外的位置。