Problem z (najprawdopodobniej) wyciekiem pamięci

0

Dzień dobry !
Rozwiązywałem zadanie z wykładu o grafach olimpiady informatycznej juniorów , i mam problem bo program po wejściu do funkcji girdBfs() program zwraca błąd , jest to najprawdopodbniej wyciek pamięci ,ale nie jestem wstanie znaleźć w którym miejscu kodu do niego dochodzi.Szukałem też miejsca w którym mogę się odwoływać poza zakres tablicy , niestety nic nie znalazłem. Z góry dziękuje za odpowiedź :)
Zadanie na OIJ: https://sio2.mimuw.edu.pl/c/zwo20/p/met/
Screen Shot z błędu:
screenshot-20200528124524.png
Kod programu:

#include <bits/stdc++.h>

using namespace std;


int odleglosci[10000][10000];
vector<pair<int,int>> stacje;
int maxx , maxy;

void girdBfs()
{
    //cout << "ENTER" << endl;
    vector<pair<int,int>> kolejka;
    int dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0};

    //odleglosci[start] = 0;

        //cout << "ODWIEDZONY" << endl;
        bool odwiedzony[10000][10000];

        for(int i=0; i<stacje.size(); i++)
        {
            int stationx = stacje[i].first;
            int stationy = stacje[i].second;
            kolejka.push_back(make_pair(stationx, stationy));
            odleglosci[stationx][stationy] = 0;

        }
        cout << "PO STACJACH" << endl;

        odwiedzony[stacje[0].first][stacje[0].second] = true;


        for (int i=0; i < kolejka.size(); i++)
        {

            pair<int,int> w = kolejka[i];
            for(int j = 0; j < 4; j++)
            {

                int aleia = w.second + dy[j];
                int ulica = w.first + dx[j];
                //cout << "aleia " << aleia << " ulica " << ulica << "\n";
                //cout << "Przetwarzanie : " << t[w][j] << endl;
                if( !(odwiedzony[ulica][aleia]) && ulica < maxy+2 && aleia < maxx+2 && ulica > 0 && aleia > 0)
                {
                    kolejka.push_back(make_pair(ulica,aleia));
                    odleglosci[ulica][aleia] = min(odleglosci[w.first][w.second]+ 1,odleglosci[ulica][aleia]);
                    //cout << "Odleglosc do: " << ulica << " " << aleia << " odleglosc " << odleglosci[ulica][aleia] << endl;
                    odwiedzony[ulica][aleia] = true;
                    //cout << "Odwiedzono: " << ulica<< " " << aleia << " z " << w.first << " " << w.second << endl;
                }
            }
        }


    //return odleglosci[meta];
}

int main()
{
    int liczba_stacji,a,b;
    cin >> maxx >> maxy >> liczba_stacji;
    stacje.resize(liczba_stacji+10);
    for(int ii=0; ii<10000; ii++)
    {
        for(int jj=0; jj<10000; jj++)
        {
            odleglosci[ii][jj] = 10000001;
        }
    }
    //cout << "INFINITOWANIE" << endl;
    for(int i=0; i<liczba_stacji; i++)
    {
        cin >> a >> b;
        stacje[i] = make_pair(a,b);

    }
    //cout << "STACJE" << endl;
    girdBfs();
    for(int i=1; i<maxx+1; i++)
    {
        for(int j=1; j<maxy+1; j++)
        {
            cout << odleglosci[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

0

Olbrzymie te tablice, a zwłaszcza na stosie, to może dać wylot

0

Myślałem że może być z tym problem , ale w jaki sposób zastąpić tablice , bo wektory chyba też tak samo by zadziałały

1

Nie, wektor alokuje pamięć dynamicznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1