Witam
Znam pojęcią sztos oraz sterty. Wiem, że na sztosie lokowane są zmienne tworzone bez operatora new i ,że po wyjściu z bloku sztos jest zwijany do stanu przed wejściem do danego bloku.
Mam taki kod. ( Jest to kod odpowiedzialny za opakowywanie zmiennej imie w strukture typu Element ) Jest to fragment kodu z listy jednokierunkowej.
Element* getNewElement(){
char tab[100];
cin >> tab;
char* dest = new char[strlen(tab)+1];
strcpy(dest, tab);
Element* e = new Element(); // Trzeba dac new zeby nie nadpisac przypadkowego obszaru pamieci
e->imie = dest;
e->next = 0;
return e;
}
Jeśli zrobię tak
e->imie = tab;
To każdy element ma to samą nazwę co nowo wprowadzony.
Zastanawiam skąd to się bierze. Przychodzi mi na myśl wniosek, że zmienna tab wskazuje cały czas na ten sam obszar pamięci i dlatego w każdym obiekcie typu Element jest to samo imię.
Ale po wyjściu z bloku zmienna tab z tego co rozumiem powinna się skasować. Więc moje pytanie brzmi następująco. Skąd w każdym elemencie bierze się to samo imię ? Czy po skasowaniu zmiennej tab powstaje ona w tym samym obszarze pamięci o takim samym adresie ?