Dynamiczna alokacja macierzy
Ostatnio zmodyfikowano 2012-12-28 11:40
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 : 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 : 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 : 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 :( |
|
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? |
|
Mike148 |
» 2012-12-27 17:23:37 Map_Floors = new C_Floors *[ Y_SIZE ];
Nie powinno czasem być Map_Floors = new C_Floors[ Y_SIZE ];
|
|
Mrovqa |
» 2012-12-27 17:28:15 @Mike148 dobrze jest - alokowanie tablicy wskaźników. |
|
Mike148 |
» 2012-12-27 17:58:52 Może wrzuć gdzieś cały kod żebyśmy mogli go skompilować u siebie. |
|
kizia Temat założony przez niniejszego użytkownika |
» 2012-12-27 22:22:00 Zauwazylem ze jak zakomentuje 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? for( int i = 0; i < Y_SIZE; i++ ) { delete[] Map_Floors[ i ]; }
delete[] Map_Floors; |
|
ison |
» 2012-12-27 23:28:36 Tak. |
|
kizia Temat założony przez niniejszego użytkownika |
» 2012-12-28 11:40:07 Dzięki za pomoc :P |
|
« 1 » |