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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分段错误:为什么这里的数组索引超出范围?相关的知识,希望对你有一定的参考价值。

我试图在这里解决问题 - https://www.codechef.com/APRIL19B/problems/FENCE并将数组初始化为0但是当我尝试访问arr [0] [4]的值时,n = 4且m = 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,但是得到垃圾值。

答案

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

long long arr[n+2][m+2]={0};
long long vec[k][k];
另一答案

我认为该数组在arr [i-1] [j]或arr [i + 1] [j]或arr [i] [j + 1]或arr [i] [j-1]中越界越界为什么错误即将到来。

以上是关于分段错误:为什么这里的数组索引超出范围?的主要内容,如果未能解决你的问题,请参考以下文章

Unity C# - 数组索引超出范围

索引超出了数组的范围[重复]

USACO dualpal 错误:分段违规

从数组中删除 - 致命错误:索引超出范围 - SwiftUI 绑定

Swift 致命错误:数组索引超出范围

索引超出范围错误(从文件中读取的数组)