Usuwanie adresu wskaznika w funkcji - bezpieczne ?
Ostatnio zmodyfikowano 2013-01-08 09:03
Nowicjusz Temat założony przez niniejszego użytkownika |
Usuwanie adresu wskaznika w funkcji - bezpieczne ? » 2013-01-07 22:50:45 czesc mam pytanie czy cos takiego jest bezpieczne void fun( int * k ) { delete[] k; k = new int( 1 ); }
int main() { int * k = new int( 5 ); fun( k ); cout << * k; }
Chodzi mi o to czy za kazdym razem adres zmiennej bedzie taki sam ? Czy jakis inny program podczas usuniecia adresu k, nie wypelni go, zanim wywola sie k = new int(1); Pisze to bo mam problem z alokacja pamieci dla dwuwymiarowej tablicy i w funkcji wszystko fajnie dziala ale jak chce na zewnatrz wypisac wartosci to wyskakuja bledy, czyli: void fun( int ** k ) { delete[] k[ 0 ]; delete[] k; k = new int *; k[ 0 ] = new int( 8 ); cout << k[ 0 ][ 0 ] << endl; }
int main() { int ** k = new int *; k[ 0 ] = new int( 1 ); fun( k ); cout << k[ 0 ][ 0 ] << endl; }
|
|
ison |
» 2013-01-07 22:58:13 Nie jest bezpieczne. Przekaż wskaźnik przez referencję. |
|
Mrovqa |
» 2013-01-08 09:03:02 Przekazujesz adres przez wartość. W funkcji owszem - modyfikujesz zawartość wskaźnika (przypisujesz nowy adres) - ale robisz to lokalnie - w funkcji main adres się nie zmienia. Jeżeli usuniesz obiekt wskazywany przez ten wskaźnik to później w funkcji main odwołasz się do już nieistniejącego obiektu. Innymi słowy: Przekaż wskaźnik przez referencję. |
:) |
|
« 1 » |