分段错误:为什么这里的数组索引超出范围?

时间:2019-04-14 05:37:10

标签: c++ arrays memory vector

我试图在这里解决问题-https://www.codechef.com/APRIL19B/problems/FENCE并将数组初始化为0,但是当我尝试使用n = 4和m = 4访问arr [0] [4]的值时,它将打印垃圾值。

我尝试使用矢量进行初始化,因为我在数组的初始化中犯了一些错误,它适用于示例测试用例,但仍然会产生分段错误。

这是我的代码-

#include<bits/stdc++.h>
#include <iostream>
using namespace std;

int main() {
    // your code goes here
    int t;
    cin>>t;
    while(t--){
        long long n,m,k,res=0;
        cin>>n>>m>>k;
        //vector<vector<long long>> arr(n+2,vector<long long>(m+2,0));
        long long arr[n+2][m+2]={0};
        long long vec[k][k];
        for(unsigned int it=0;it<k;it++){
            int t1,t2;
            cin>>t1>>t2;
            arr[t1][t2]=1;
            vec[it][0]=t1;
            vec[it][1]=t2;
        }
        cout<<"values:"<<arr[1][4]<<endl;
        for(unsigned int itr =0;itr<k;itr++){
            int j = vec[itr][0];
            int i = vec[itr][1];
            //cout<<i<<" "<<j<<endl;
            res+=4-(arr[i-1][j]+arr[i+1][j]+arr[i][j-1]+arr[i][j+1]);
        }
        cout<<res<<endl;
    }
    return 0;
}

编辑: 样本输入为:

Example Input
2
4 4 9
1 4
2 1 
2 2
2 3
3 1
3 3
4 1
4 2
4 3
4 4 1
1 1
Example Output
20
4

约束:

  1≤T≤10 
  1≤N,M≤10^9
  1≤K≤10^5
  1≤r≤N
  1≤c≤M
  the cells containing plants are pairwise distinct

我希望第一个测试用例的输出为20,但会得到垃圾值。

2 个答案:

答案 0 :(得分:0)

declaring an array in C++时,其大小必须为constant expression-即,必须在编译时知道其大小。您的编译器应该抱怨这些行,因为mnk在编译时未初始化(更正确地说,是初始化为不确定的值):

long long arr[n+2][m+2]={0};
long long vec[k][k];

答案 1 :(得分:0)

我认为数组超出了arr [i-1] [j]或arr [i + 1] [j]或arr [i] [j + 1]或arr [i] [j- 1]为什么会出现错误。