Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczna alokacja macierzy

Ostatnio zmodyfikowano 2012-12-28 11:40
Autor Wiadomość
kizia
Temat założony przez niniejszego użytkownika
Dynamiczna alokacja macierzy
» 2012-12-27 14:32:28
A mianowicie mam klasy w ktorej mam statyczny wskaznik na wskazniki ;d
static C_Floors ** Map_Floors;
Noom i on dostaje swoja działke :

C/C++
void C_Map::CreateMap()
{
    Map_Floors = new C_Floors *[ Y_SIZE ];
   
    for( int y = 0; y < Y_SIZE; y++ )
    {
        Map_Floors[ y ] = new C_Floors[ X_SIZE ];
       
        for( int x = 0; x < X_SIZE; x++ )
        {
            Map_Floors[ y ][ x ] = wsk_T_Floors[ 2 ];
        }
    }
}

nom i pod koniec programu go mykam :
C/C++
void C_Map::Close_Map_Delete() {
    delete wsk_T_Floors;
    delete wsk_Items;
   
    for( int i = 0; i < Y_SIZE; i++ )
    {
        delete[] Map_Floors[ i ];
    }
   
    delete[] Map_Floors;
}
Uproszczony main :
C/C++
int main()
{
   
    C_Map::CreateMap()
    while( 1 )
    {
    }
    C_Map::Close_Map_Delete()
}
nom i albo sie zamyka okno ale proces zostaje, albo po zamknieciu wyswietla sie komuniat ze aplikacja przestala dzialas i ogolnie jak zamykam to sypie bugami :(
P-72074
Mrovqa
» 2012-12-27 17:22:05
Może gdzieś odwołujesz się poza swoją pamięć? Może gdzieś pomyliłeś indeksy x i y tablicy?
P-72103
Mike148
» 2012-12-27 17:23:37
C/C++
Map_Floors = new C_Floors *[ Y_SIZE ];

Nie powinno czasem być
C/C++
Map_Floors = new C_Floors[ Y_SIZE ];
P-72104
Mrovqa
» 2012-12-27 17:28:15
@Mike148 dobrze jest - alokowanie tablicy wskaźników.
P-72106
Mike148
» 2012-12-27 17:58:52
Może wrzuć gdzieś cały kod żebyśmy mogli go skompilować u siebie.
P-72110
kizia
Temat założony przez niniejszego użytkownika
» 2012-12-27 22:22:00
Zauwazylem ze jak zakomentuje
C/C++
// delete []Map_Floors[i] ;
 to wszystko smiga pomimo dziur w pamieci ;d a potem tak skminilem ciekawa rzecz ze klasa C_floor dziedziczy destruktor z klasy bazowej w ktorym jest instrukcja SDL_FreeSurfce() ; i moze to wszystko przez to? Jak deletuje to destruktor pracuje tak? A w tym przypadku to raczej bardzoo zły rezultat. Czy to ma sens?

Edit :

Wymyslilem cos takiego :
zamiast
C_Floors ** Map_Floors
 Dalem
C_Floors *** Map_Floors
 No i tworzac zamiast obiekty Tworze wskazniki, dzieki czemu deletujac nie usuwam zadnego elementu (czyli chyba destruktor nie rusza tak?) a jedynie usuwam wskaznik. Powiedzcie mi tylko czy jezeli mam tablice wskaznikow to takie zwalnianie pamieci jakie bylo jest poprawne?
C/C++
for( int i = 0; i < Y_SIZE; i++ )
{
    delete[] Map_Floors[ i ];
}

delete[] Map_Floors;
P-72143
ison
» 2012-12-27 23:28:36
Tak.
P-72148
kizia
Temat założony przez niniejszego użytkownika
» 2012-12-28 11:40:07
Dzięki za pomoc :P
P-72164
« 1 »
  Strona 1 z 1