Chcąc upewnić się, że moja wiedza na temat wskaźników jest wystarczająca napisałem dwa krótkie programy:
1:
#include <iostream>
using namespace std;
int main()
{
int lol;
int *adres_lola=&lol;
cout << "Wartosc lola: " << lol << endl << "Adres lola: " << reinterpret_cast<unsigned int>(adres_lola) << endl;
getchar();
cout << "Aktualna wartosc lola: " << lol << endl;
getchar();
//int *test;
//int liczba=5;
//int adres=0x0012FF74;
//*test=liczba;
//cout << "Wstawilem pod adres: " << adres << " wartosc " << liczba << "." << endl;
//getchar();
}
2:
#include <iostream>
using namespace std;
int main()
{
//int lol;
//int *adres_lola=&lol;
//cout << "Wartosc lola: " << lol << endl << "Adres lola: " << reinterpret_cast<unsigned int>(adres_lola) << endl;
//getchar();
//cout << "Aktualna wartosc lola: " << lol << endl;
//getchar();
int *test;
int liczba=5;
int adres=0x0012FF74;
*test=liczba;
cout << "Wstawilem pod adres: " << adres << " wartosc " << liczba << "." << endl;
getchar();
}
W przypadku pierwszego programu, nie wpisywałem do zmiennej lol wartości, bo mam świadomość tego, że wartość zmiennych automatycznych przechowywana jest na stosie i tym samym chciałem się upewnić, że wartość nadal nie będzie taka jak wpisuje ją program drugi przy ponownym uruchomieniu programu 1. Rezerwowany adres dla zmiennej lol zawsze jest taki sam, dlatego w drugim programie wpisałem tę wartość na sztywno.
Problem:
Uruchamiam program pierwszy i na pierwszym getchar(); zawieszam program. Uruchamiam program 2 po czym kontynuuję program 1 i ku mojemu zdziwieniu wartość przechowywana pod adresem zmiennej lol pozostaje bez zmian, a przecież powinna pokazać 5, dlaczego tak się dzieje?