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

Wskaźniki i dynamiczna alokacja pamięci

Ostatnio zmodyfikowano 2014-08-14 15:51
Autor Wiadomość
Haryen
Temat założony przez niniejszego użytkownika
Wskaźniki i dynamiczna alokacja pamięci
» 2014-08-14 14:42:01
Witam! Mógłby mi ktoś wytłumaczyć o co chodzi z dynamiczną alokacją pamięci?

C/C++
int * w1;
w1 = new int; //tworzę obiekt, teraz wskaźnik pokazuje na ten obiekt
cout << w1 << endl; //pokazuję adres obiektu
delete w1; //usuwam obiekt
cout << w1 << endl; //wskaźnik na nic już nie pokazuje a mimo to wyświetla adres

Program wyświetla:

008C3C40
00008123

Nawet jeśli utworzę kilka wskaźników i obiekty, na które pokazują to po użyciu delete każdy wskaźnik zawsze pokazuje na adres 00008123. Dlaczego?

Co więcej kod:
C/C++
int * w1;
cout << w1 << endl; //wskaźnik na nic nie pokazuje, program się nie kompiluje, OK
w1 = new int;

a teraz
C/C++
int * w1;
cout << & w1 << endl; //pokazuje adres samego wskaźnika
cout << w1 << endl; //wskaźnik na nic nie pokazuje, mimo to program się kompiluje i wyświetla jakiś dziwny adres. Raczej nie powinien się kompilować.
w1 = new int; //dopiero tutaj na coś pokazuje
O co chodzi?
P-115446
Jacob99
» 2014-08-14 15:30:10
Wskaźnik zawsze na coś pokazuje. Co do tego kodu:
C/C++
int * w1;
cout << w1 << endl; //wskaźnik na nic nie pokazuje, program się nie kompiluje, OK
w1 = new int;
 to nie wiem czemu się nie kompiluje, bo powinien się kompilować(nie ma tam błędu);
A to na co pokazuje wskaźnik po użyciu
delete
 to zależy od implementacji kompilatora.
P-115448
Monika90
» 2014-08-14 15:40:59
Wskaźnik zawsze na coś pokazuje
No chyba jednak nie. Jak ma wartość NULL, to na nic nie pokazuje.


C/C++
int * w1;
cout << w1 << endl; //wskaźnik na nic nie pokazuje, program się nie kompiluje, OK
w1 = new int;
 to nie wiem czemu się nie kompiluje, bo powinien się kompilować(nie ma tam błędu);
błąd jest, bo to jest drukowanie niezainicjalizowanej zmiennej, ale faktycznie taki błąd w typowych kompilatorach nie powoduje błędu kompilacji.
P-115450
Haryen
Temat założony przez niniejszego użytkownika
» 2014-08-14 15:51:43
Używam VS2013 Express. Nie wiem jaki ma kompilator, ale to chyba dobre IDE, więc crapu by nie dali. :D
P-115453
« 1 »
  Strona 1 z 1