Usuwanie wskaźników

0

Cześć!

Na codzień nie programuję w C++ więc siedziałem nad tym dwie godziny:
Mam taką funkcję:

void funkcja(Typ* Zmienna1,Typ *Zmienna2)
{
    ...
    delete * Zmienna1;
    delete * Zmienna2;

    Zmienna1 = new TypPochodny();
    Zmienna2 = new TypPochodny();
}

Potem gdy chcę skorzystac z tych wskaznikow poza funkcja, Zmienna1 jest prawidlowa, a pola Zmienna2 są niezaalokowane.

Takie coś dziala:

void funkcja(Typ* Zmienna1,Typ *Zmienna2)
{
    ...
    delete * Zmienna1;

    Zmienna1 = new TypPochodny();

    delete * Zmienna2;
    Zmienna2 = new TypPochodny();
}

Dlaczego tak się dzieje?

Edit:

Pisałem w visual studio 2010.

1

Aby to zadziałało musisz przekazać argumenty przez referencje bądź wskaźnik. Czyli *& lub **.

0

Jeszcze w samej funkcji oba obiekty są prawidłowe. Zaalokowane itd.

A i oczywiście pomyłka. Było:

delete Zmienna1;
delete Zmienna2;
1
rafal-prog napisał(a):

A i oczywiście pomyłka. Było:

delete Zmienna1;
delete Zmienna2;

Właśnie to jedyne co nie było pomyłką.

void funkcja(Typ **Zmienna1,Typ **Zmienna2)
  {
    delete *Zmienna1;
    delete *Zmienna2;
 
    *Zmienna1=new TypPochodny();
    *Zmienna2=new TypPochodny();
  }

  {
   Typ *Z1=0,*Z2=0;
   funkcja(&Z1,&Z2);
   funkcja(&Z1,&Z2);
   delete Z1;
   delete Z2;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1