Tablica i Segmentation Fault

0

Witam

Mam następujący problem:
Bawię się w pisanie gierki roguelike korzystając z pomocy tutoriala. Problem pojawia się gdy zwiększam rozmiar tablicy z orginału:

#define MAPA_WYSOKOSC 20
#define MAPA_SZEROKOSC 20
....
int MapaArray[MAPA_WYSOKOSC][MAPA_SZEROKOSC] =
{
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
... 
};

do docelowej:

....
#define MAPA_SZEROKOSC 30
....

Oczywiście dodałem odpowiednią ilość elementów do tablicy, ale pojawia się segmentation fault. Próbowałem używac funkcji delete w różnych miejscach ale uzyskiwałem tylko błędy przy kompilacji, dlatego postanowiłem się zwrócić o pomoc.

funkcje korzystające z tablicy wyglądają następująco:

void RysujMape()
{
    for( int y = 0; y < MAPA_WYSOKOSC; y++ )
        {
                move(y,0);
                for( int x = 0; x < MAPA_SZEROKOSC; x++ )
                {
                RysujTile(y,x);
                }
        }
}
 
void RysujTile(int x, int y)
{
    move(y,x);
    switch (MapaArray[y][x])
                        {
                            case TILE_TRAWA:
                        attron(COLOR_PAIR(2));
                        printw(".");
                        attroff(COLOR_PAIR(2));
                        break;
 
                case TILE_SCIANA:
                        attron(COLOR_PAIR(1));
                        printw("#");
                        attroff(COLOR_PAIR(1));
                        break;
 
                case TILE_PODLOGA:
                        attron(COLOR_PAIR(1));
                        printw(".");
                        attroff(COLOR_PAIR(1));
                        break;
 
                case TILE_DRZEWO_M:
                        attron(COLOR_PAIR(2));
                        printw("t");
                        attroff(COLOR_PAIR(2));
                        break;
 
                case TILE_OTW_DRZWI:
                        attron(COLOR_PAIR(3));
                        printw("/");
                        attroff(COLOR_PAIR(3));
                        break;
 
                case TILE_ZAM_DRZWI:
                        attron(COLOR_PAIR(3));
                        printw("+");
                        attroff(COLOR_PAIR(3));
                        break;
 
                case TILE_WODA:
                        attron(COLOR_PAIR(4));
                        printw("=");
                        attroff(COLOR_PAIR(4));
                        break;
 
                case TILE_GORA:
                    attron(COLOR_PAIR(1));
                    printw("^");
                    attroff(COLOR_PAIR(1));
                    break;
                        }
}

Co poprawić aby pozbyć się błędu i móc dalej działać??

0

Zmieniasz tylko

#define MAPA_SZEROKOSC 30

czy #define MAPA_WYSOKOSC

 też zmieniasz na 30?
1

Ja tylko szybki hint. Nie musisz pisać tych wszystkich zer. Wystarczy:

int MapaArray[MAPA_WYSOKOSC][MAPA_SZEROKOSC] = { { 0 } };
0
mychal napisał(a):

Zmieniasz tylko

#define MAPA_SZEROKOSC 30

czy #define MAPA_WYSOKOSC

 też zmieniasz na 30?


tylko
```cpp
 #define MAPA_SZEROKOSC

ale docelowo ma byc tam 80

1

Wychodzisz poza zakres tablicy. Na moje oko tutaj:

RysujTile(y,x);

powinno być

RysujTile(x,y);
0

Działa dziękuje za pomoc :)

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