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] 3 wymiarowa tablica dynamiczna c++


Rekomendowane odpowiedzi

Opublikowano

Witam mam problem otoz gdy usuwam tablice 3 wymiarowa dynamiczna mam blad

 

alokacja:

 

    Pole ***MapaPole;    
    MapaPole = new Pole **[Wysokosc];

    for(*y=0; *y<Wysokosc; *y=*y+1)
        MapaPole[*y] = new Pole *[Szerokosc];

    for(*y=0; *y<Wysokosc; *y=*y+1)
		for(*x=0; *x<Szerokosc; *x=*x+1)
            MapaPole[*y][*x] = new Pole(0,0,0,0);

 

oto sposob w jaki usuwam ja:

 

    for(*x=0; *x<Wysokosc; *x=*x+1)
		{
            for(*y=0; *y<Szerokosc; *y=*y+1)
                {
                    delete[] MapaPole[*x][*y];
                }
            delete[] MapaPole[*x];
		}

    delete[] MapaPole;

w czym jest blad?

Opublikowano

czemu do wszystkiego używasz wskaźników?

 

 

Pole ***MapaPole; 
MapaPole = new Pole** [Wysokosc];

for(int y=0; y<Wysokosc; ++y)
{
    MapaPole[y] = new Pole* [Szerokosc]
        for(int x=0; x<Szerokosc; ++x)
             MapaPole[y][x] = new Pole(0,0,0,0);
}
 

 

for(int y=0; y<Wysokosc; ++y)
{
      for(int x=0; x<Szerokosc; ++x)
      {
            delete MapaPole[y][x];
      }
      delete[] MapaPole[y];
 }
delete[] MapaPole;
 

powinno być ok

Opublikowano

uzywam wskaznikow bo przy tablicy 10000x10000 trzeba jednak oszczedzac pamiec

 

zreszta lepiej tez dla x i y zaalokowac raz pamiec niz zakazdym razem szukac nowej szybciej dziala :)

 

btw to ze nie uzyje wskaznikow nie zmieni nic ...

Opublikowano

uzywam wskaznikow bo przy tablicy 10000x10000 trzeba jednak oszczedzac pamiec

czy na stercie, czy na stosie i tak zajmie tyle samo. Pytanie czy się zmieści, ale to już inna sprawa.

zreszta lepiej tez dla x i y zaalokowac raz pamiec niz zakazdym razem szukac nowej szybciej dziala :)

można też raz na stosie i nie bawić się niepotrzebnie wskaźnikami.

alokowanie 4 bajtowych skrawków na stercie to przesada

btw to ze nie uzyje wskaznikow nie zmieni nic ...

odwołanie się do zmiennej na stercie jest wolniejsze niż do zmiennej w rejestrze/cache

 

moze jest blad bo wczesniej juz wszystkie wartosci pola usuwam dynamicznie hm

jak nie działa mój kod to napisz dokładnie jakie są symptomy

 

btw. Tworzysz dwuwymiarową tablicę Pole*, nie trójwymiarową.

Opublikowano

Jesli odczytuje z plikui wczytuje lepiej korzystac z dynamicznej tak mi sie wydaje, po co mam alokowac pamiec podczas wlacznia programu na cos skoro nawet nie wiadomo czy bede musial tego uzyc.

 

Moze i 2 wymiarowa :PP ale poco wtakim razie musze robic wskaznik na funkcje klasy Pole ? przez to troche mi sie pojebalo :PP

 

Zreszta praca na pamieci dynamicznej jej wazna umiejetnoscia lecz latwo sie pogubic wiec trzeba cwiczyc :)

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...