tablica dynamiczna

sarsik87

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
40
Kod:
 int *tab = NULL;

  int ile;

  cin>>ile;

  tab=new int[ile];

co sie stanie jak umieszcze powyzszy kod w petli tzn. zakladamy ze mamy petle ktora wykona sie kilka razy (powiedzmy 5) to czy utworzy sie 5 tablic w osobnych obszarach pamieci czy utworzona zostanie jedna a kolejne beda nadpisywaly juz istniejaca??
 

/carnage

Użytkownik
Dołączył
Lipiec 2, 2007
Posty
35
co sie stanie jak umieszcze powyzszy kod w petli tzn. zakladamy ze mamy petle ktora wykona sie kilka razy (powiedzmy 5) to czy utworzy sie 5 tablic w osobnych obszarach pamieci czy utworzona zostanie jedna a kolejne beda nadpisywaly juz istniejaca??[/b]
moim zdaniem odpowieć na to pytanie nie powinna cię interesować pomyśl przeciez nawet gdy by tablice się nadpisywały lub nawet tworzyły się oddzielnie w pamięci to i tak ty dostaniesz wskażnik do ostatniej nadpisanej tablicy lub jeżeli tworzą się w pamięci nowe tablice to ty będziesz miał wskażnik do ostatniej utworzonej tablicy.
 

sarsik87

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
40
ale jednak interesuje mnie co sie stanie..... wiem ze bede mial wskaznik tylko do ostatniej....wiec co sie stanie?? beda sie nadpisywaly czy nie??
 

/carnage

Użytkownik
Dołączył
Lipiec 2, 2007
Posty
35
Tym kodem co ty napisałeś będą się tworzy nowe tablice ponieważ zerujesz wskażnik na początku pętli podam ci przykład, jak byś nie zainicjalizował wskaznika zerem to on by tworzył te tablice w przypadkowych adresach(bo wskaznik zawsze na coś pokazuje) pamięci i mogł by zniszczyc jakieś dane.
 

sarsik87

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
40
troche zle to napisalem...


Kod:
 int *tab = NULL;



petla

{

  int ile;

  cin>>ile;

  tab=new int[ile];

  }

w takim przypadku tworza sie caly czas nowe czy sie nadpisuja??
 

/carnage

Użytkownik
Dołączył
Lipiec 2, 2007
Posty
35
Kod:
#include <iostream>



using namespace std;



int main()

{

    

     int *tab = NULL; 

try

{

while(1)

{ 

  

  cout << "ile elementów ma miec tablice";

  int ile; 

  cin>> ile;

  tab=new int[ile]; 

  

  cout <<"element 0" << (*tab);

  }

}   



catch(bad_alloc)

{

cout << "nieudana rezerwacja pamięci stworzyłes juz za dużo obiektów dynamicznych";

                

                

}

system("pause");

}
skompiluj i uruchom program(i wpisz dużo razy jakieś wartości liczobowwe a jeżeli chccesz szybko zobaczyć efekt zapychania pamięci wpisz jakąś litere
<
) następnie wcisnij ctr+alt+delte wejdz w zakładke procesy i zobacz że zużytwanie pamięci przez ten program stale rosnie czyli program tworzy nowe tablice nie nadpisująch wcześniejszych tablic
 
Do góry Bottom