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

Usuwanie adresu wskaznika w funkcji - bezpieczne ?

Ostatnio zmodyfikowano 2013-01-08 09:03
Autor Wiadomość
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

C/C++
void fun( int * k )
{
    delete[] k;
   
    k = new int( 1 );
   
}


int main()
{
    int * k = new int( 5 );
   
    fun( k );
   
    cout << * k; //Pokaze 1
   
}

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:


C/C++
void fun( int ** k ) {
    delete[] k[ 0 ];
    delete[] k;
   
    k = new int *;
    k[ 0 ] = new int( 8 );
   
    cout << k[ 0 ][ 0 ] << endl; //Tutaj dobrze
   
}

int main()
{
    int ** k = new int *;
    k[ 0 ] = new int( 1 );
   
    fun( k );
   
    cout << k[ 0 ][ 0 ] << endl; //Tutaj blad
   
   
}


P-73295
ison
» 2013-01-07 22:58:13
Nie jest bezpieczne.
Przekaż wskaźnik przez referencję.
P-73299
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ę.
 :)
P-73308
« 1 »
  Strona 1 z 1