Ошибка сегментации: почему индекс массива выходит за границы? - PullRequest
1 голос
/ 14 апреля 2019

Я пытался решить проблему здесь - 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;
}

Edit: Пример ввода:

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 голосов
/ 14 апреля 2019

Я думаю, что массив выходит за границы в arr [i-1] [j] или arr [i + 1] [j] или arr [i] [j + 1] или arr [i] [j- 1] вот почему возникает ошибка.

0 голосов
/ 14 апреля 2019

Когда объявляет массив в C ++ , его размер должен быть константным выражением - то есть размер должен быть известен во время компиляции.Ваш компилятор должен жаловаться на эти строки, потому что m, n и k неинициализированы (точнее, инициализированы неопределенными значениями) во время компиляции:

long long arr[n+2][m+2]={0};
long long vec[k][k];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...