Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem]c++ program się zacina


Rekomendowane odpowiedzi

Opublikowano

Cześć, mam pewien problem, mój program się zacina, debuger pokazuje mi błąd:

"Nr: 0 addres: 00420192 Function: mapa::draw(this=0x22fef4)"

Program ma polegać na tworzeniu map o danej wielkości, może później zrobię jakieś dodatkowe funkcje. Kod prezentuje się tak:

Chcę podkreślić, że jeśli mapa ma wymiary 2,2 jest wporządku, ale jeśli wartości są większe program właśnie się zacina.

class mapa
{
public:

    int** level;
    int szer;
    int wys;

    mapa(int x, int y) : szer(x), wys(y){
        level = new int*[y];
        for(int i = 0; i < y; i++)
        {
            level[y] = new int[x];
        }
    }

    void Draw()
    {
        for(int i = 0; i < wys; i++ )
        {
            for(int j = 0; j < szer; j++)
            {
                level[i][j] = 1;
                cout << level[i][j];
            }
            cout << endl;
        }
    }
    ~mapa(){
        delete []level[wys];
        delete []level[szer];
    }
};

int main()
{
    mapa m(5,5);
    m.Draw();
    return 0;
}

Opublikowano

Wywala błąd "segmentation fault", założę się, że program wychodzi gdzieś poza granicę tablicy...

 

A do destruktora, to nie wystarczy same delete [][]level?

 

Też się zastanawiam jak to zrobić...

W każdym razie podsuwam ci rozwiązanie trochę wymijające:

Stwórz tablicę jednowymiarową, którą zainicjujesz iloczynem dwóch argumentów konstruktora, a później poprzez odpowiednią funkcję będziesz się odwoływał do komórki pamięci (f(x,y)).

 

Albo jakiś obiekt imitujący tablicę z zdefiniowanym operatorem nawiasów kwadratowych.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Weteran
Opublikowano

W konstruktorze zamiast level[y] wstaw level.

W destruktorze źle usuwasz pamięć. Powinno być

for(int i = 0; i < szer; ++i) delete[] level[i];
delete[] level;

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...