[C++] Wskaźniki, a adresy zmiennych
Ostatnio zmodyfikowano 2012-11-09 12:17
diego997 Temat założony przez niniejszego użytkownika |
[C++] Wskaźniki, a adresy zmiennych » 2012-11-09 11:45:02 Czy zgodzicie sie z tym ze mowienie iz wskaznik na cos pokazuje, jest bledne ? Gdyby tak bylo to przeciez taki kod wykonalby sie bez problemow int k = 5;
int * wsk;
wsk = & k;
cout << * wsk << endl;
delete wsk;
cout << k << endl;
Pewnie to kolejna rozkmnina nad banalnym problemem ktora nic nie wnosi, i na pewno bledna. Mozecie mnie nakierowac :D? P.S *Sory zle napisalem error on wyskakuje przy usuwaniu adressu ale to nadal ten sam problem ;p |
|
DejaVu |
» 2012-11-09 11:51:05 Nie można usuwać pamięci operatorem delete (ani funkcją ::free), której sam nie zarezerwowałeś. & oznacza pobranie adresu zmiennej. * oznacza pobranie wartości spod adresu na który wskazuje wskaźnik. Zmienna wsk ma inny adres niż zmienna k. Nawet jeżeli przypiszesz: to nadal adres zmiennej wsk będzie != NULL, tj. printf( "Adres wsk = %p\n", & wsk );
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-11-09 12:06:53 Dejavu moglbys spojrzec na to i powiedzeic czy jest poprawne ? Link: http://imageshack.us/f/827/wskazniki.png/P.S Dzieki temu co napisales niemozliwa jest operacja delete &wsk; Prawda ? Aha czyli raczej ten screen bedize niepoprawny bo gdyby tak dzialaly wskazniki to by raczej ich nie bylo ;p |
|
DejaVu |
» 2012-11-09 12:09:45 Każda zmienna ma swój adres - nie ważne czy jest to wskaźnik czy też nie. @up: operacja jest możliwa, ale jest nieprawidłowa. /edit: #include <cstdio>
int main() { int zmienna = 0; int * wskaznik = NULL; printf( "adres 'zmienna' = %p\n", & zmienna ); printf( "adres 'wskaznik' = %p\n", & wskaznik ); printf( "wartosc 'zmienna' = %p\n", zmienna ); printf( "wartosc 'wskaznik' = %p\n", wskaznik ); wskaznik = & zmienna; printf( "wartosc 'wskaznik' = %p\n", wskaznik ); return 0; }
Standardowe wyjście programu: adres 'zmienna' = 0028ff1c adres 'wskaznik' = 0028ff18 wartosc 'zmienna' = 00000000 wartosc 'wskaznik' = 00000000 wartosc 'wskaznik' = 0028ff1c
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2012-11-09 12:16:45 No wlasnie i przez to wydawalo mi sie ze: jest rownowazne: int zmienna;
delete zmienna;
|
|
Badman |
» 2012-11-09 12:17:55 P.S *Sory zle napisalem error on wyskakuje przy usuwaniu adressu ale to nadal ten sam problem ;p
|
Ten error to pewnie ochrona pamięci systemu.
Pomyśl chcesz zwolnić obszar pamięci, którego nie rezerwowałeś ! |
|
« 1 » |