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

Tablica wskaźników, dynamiczna alokacja pamięci.

Ostatnio zmodyfikowano 2010-10-20 19:00
Autor Wiadomość
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.
P-23053
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?
P-23060
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 ; /
P-23062
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ę.
C/C++
int ** tab;
tab = new int *[ rozmiar_podany ];
P-23064
kizia
Temat założony przez niniejszego użytkownika
» 2010-10-20 19:00:05
Dzięki.
P-23085
« 1 »
  Strona 1 z 1