Tablica wskaźników, dynamiczna alokacja pamięci.
Ostatnio zmodyfikowano 2010-10-20 19:00
kizia Temat założony przez niniejszego użytkownika |
Tablica wskaźników, dynamiczna alokacja pamięci. » 2010-10-20 14:41:51 Witam, mam problem z tablicą wskaźników.
Mam tablice wskaźników :
int ALL_TILES ;
Field *field[ALL_TILES]
for(int i = 0 ; i < ALL_TILES ; i++)
field[i] = new Field ;
W main wysyłam to do funkcji :
handle_input(field) ;
show_all(field)
Teraz jeżeli użytkownik naciśnie 'wczytaj' to usuwam aktualą tablice, ładuje z pliku ile ma być kafli,
tworze je i wypełniam.
for(int i = 0 ; i < ALL_TILES ; i++)
delete field[i] ;
std::ifstream map("plik") ;
map >> ALL_TILES ;
Field *field[ALL_TILES] ;
for(int i = 0 ; i < ALL_TILES ; i++)
field[i] = new Field ;
//.. teraz do nich ładuje dane z pliku.
I po tej operacji program się wyłącza.
Pytanie :
Jeżeli ja w funkcji usunę tablice tych wskaźników i stworze od nowa tylko więcej lub mniej, to do funkcji w main
np : show_all(field) będzie wysyłana ta tablica którą już usunąłem, bo ta którą stworzyłem ma zakres ważności tylko w tej funkcji w której ją stworzyłem?
Spodziewam się że tego co napisałem u góry nikt nie zrozumie dlatego napisze o co mi chodzi :
Dynamicznie tworze x wskaźników. i wszystko jest Ok.
Jeżelli użytkownik naciśnie 'wczytaj' to usuwam te aktualne wskaźniki i tworze jeszcze raz tylko tym razem nie
x wskaźników, tylko taką liczbe jaką załadowałem z pliku czyli y wskaźników, i tymi wskaźnikami chcę dalej posługiwać się w funkcji main.
Wielkie PRZEPRSZAM za takie tłumaczenie dziwne. |
|
pekfos |
» 2010-10-20 16:55:07 ile można.. kompilator musi z góry wiedzieć ile ma być elementów tablicy i skąd ma wiedzieć co szanowny user raczy wpisac? |
|
kizia Temat założony przez niniejszego użytkownika |
» 2010-10-20 17:12:58 No ale przecież do tego miała mi służyć dynamiczna alokacja pamięci.
Bo ja nie wiem ile będzie tych wskaźników, to ma zależeć od użytkownika.
Mam po prostu zrobić Field *field[100000000000000] ;
for(int i = 0 ; i < ALL_TILES ; i++)
field[i] = new Field ; przecież to sensu nie ma ; / |
|
pekfos |
» 2010-10-20 17:19:07 oczywiście, bo taka tablica nigdy by nie powstała. kompilator ma ograniczenia pod względem rozmiaru tablicy. nie rób statycznej tablicy wskaźników tylko wskaźnik na tablicę. int ** tab; tab = new int *[ rozmiar_podany ]; |
|
kizia Temat założony przez niniejszego użytkownika |
» 2010-10-20 19:00:05 Dzięki. |
|
« 1 » |