分段错误:为什么这里的数组索引超出范围?
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 - 也就是说,大小必须在编译时知道。您的编译器应该抱怨这些行,因为m
,n
和k
在编译时未初始化(更正确,初始化为不确定值):
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]中越界越界为什么错误即将到来。
以上是关于分段错误:为什么这里的数组索引超出范围?的主要内容,如果未能解决你的问题,请参考以下文章