Program przerywa się błędem 0xC0000005, związek z funkcją.

0

Witam. Piszę grę kółko i krzyżyk. Mam problem pojawiający się przy wykonywaniu funkcji odpowiedzialnej za ruch komputera. Program kończy się błędem 0xC00000005, sprawdzałem poprzez wstawianie cout'ów gdzie wywala program i wydaje mi się, że przed samym returnem. Nie wiem gdzie leży dokładnie błąd, jakieś sugestie? Poniżej kod wspomnianej funkcji oraz pliku nagłówkowego. Dodam, że reszta funkcji działa poprawnie - sprawdzane przy grze multiplayer.

funkcja:

 RuchSI SI::wez_najlepszy_ruch(Plansza &plansza, int gracz)
{

    int ow = plansza.sprawdz_wygrana();
    if(ow == gracz_si) {
        return RuchSI(10);
    } else if (ow == gracz_czl) {
        return RuchSI(-10);
    }else if (ow == WAR_REMIS) {
        return RuchSI(0);
    }

    vector<RuchSI> ruchy;

    for(int y = 0; y<plansza.wez_wymiar(); y++ ){
        for(int x = 0; x<plansza.wez_wymiar(); x++){
            if (plansza.wez_wartosc(x, y) == WAR_BRAK){
                RuchSI ruch;
                ruch.x = x;
                ruch.y = y;
                plansza.ustaw_wartosc(x, y, gracz);
                if (gracz == gracz_si) {
                    ruch.wynik = wez_najlepszy_ruch(plansza, gracz_czl).wynik;
                } else {
                    ruch.wynik = wez_najlepszy_ruch(plansza, gracz_si).wynik;
                }
                ruchy.push_back(ruch);
                plansza.ustaw_wartosc(x,y, WAR_BRAK);
            }
        }
    }

    int najlepszyRuch = 0;
    if (gracz == gracz_si){
        int najlepszyWynik1 = -1000000;
        for (size_t i = 0; i<ruchy.size(); i++){
            if(ruchy[i].wynik > najlepszyWynik1 ) {
                najlepszyRuch = i;
                najlepszyWynik1 = ruchy[i].wynik;
            }
        }
    } else {
        int najlepszyWynik2 = 1000000;
        for (size_t i = 0; i<ruchy.size(); i++){
            if(ruchy[i].wynik < najlepszyWynik2 ) {
                najlepszyRuch = i;
                najlepszyWynik2 = ruchy[i].wynik;
            }
        }
    }
    return ruchy[najlepszyRuch];
}

SI.h

 struct RuchSI{
    RuchSI() {};
    RuchSI(int Wynik) : wynik(Wynik) {}
    int x;
    int y;
    int wynik;
};

class SI{
public:
    void inicjuj(int graczSI);
    void wykonaj_ruch(Plansza &plansza);
private:
    RuchSI wez_najlepszy_ruch(Plansza &plansza, int gracz);
    int gracz_si;
    int gracz_czl;
};
0

Czym jest plansza, co mówi debugger?

0

Segmentation fault w lini z returnem. Screen log'u: http://screenshot.sh/m2asGqQVgQaVn Plansza to tablica elementami i metody do niej, poniżej kod.

#define ROZMIAR 15

using namespace std;

const int WAR_REMIS = -1;
const int WAR_BRAK = 0;
const int WAR_KRZYZYK = 1;
const int WAR_KOLKO = 2;

class Plansza{
    int ilosc_w_rzedzie;
    int wymiar;
    int plansza[ROZMIAR][ROZMIAR] ;
public:
    void inicjuj(int rozmiar, int ilosc_wygrana);
    void wyswietl_plansze();
    int wez_wartosc(int kolumna, int wiersz);
    void ustaw_wartosc(int kolumna, int wiersz, int wartosc);
    int wez_wymiar();
    int sprawdz_wygrana();
}; 

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