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

jak toto interpretować??

Ostatnio zmodyfikowano 2011-05-07 12:01
Autor Wiadomość
marek
Temat założony przez niniejszego użytkownika
jak toto interpretować??
» 2011-05-07 10:52:59
Coś takiego było w materiałach dodatkowych. Co ciekawsze cały program działał!
C/C++
delete m_nastepnaOsoba;
m_nastepnaOsoba = NULL;

Pierwsza instrukcja powoduje że komórka pamięci o
nazwie "zmienna m_nastepnaOsoba" nie istnieje.

Druga instrukcja zaś wpisuje NULL do komórki która nie istnieje!

P-32773
malan
» 2011-05-07 11:11:01
Druga instrukcja zaś wpisuje NULL do komórki która nie istnieje!
Na pewno?
P-32776
marek
Temat założony przez niniejszego użytkownika
» 2011-05-07 11:31:51
Nie bardzo rozumiem

Pierwsza instrukcja powoduje że zmienna "m_nastepnaOsoba" nie istnieje już dla tego programu. Przecież pamięć dla zmiennej została już zwolniona.
Czyżby samo
m_nastepnaOsoba = NULL;
 ponownie powoływało tą zmienną do życia?

Wiem, że gdzieś popełniam błąd, bo program działa.
P-32781
malan
» 2011-05-07 11:57:49
Ty mówisz cały czas o czymś takim:
* m_nastepnaOsoba = NULL;
, czyli o wpisaniu NULL do komórki na którą pokazuje wskaźnik.
m_nastepnaOsoba = NULL;
 po prostu ustawia wskaźnik na adres zerowy, czyli na nic konkretnego. Często jest to tylko informacja dla programisty, która może zostać wykorzystana w takim przypadku (na przykład):
C/C++
TopicListDialog::TopicListDialog()
    : topicDetailsDialog( 0 )
{
}
//...
void TopicListDialog::onShowTopicDetailsEvent(...)
{
    if( !topicDetailsDialog ) // Sprawdzamy, czy wskaźnikowi została już przydzielona pamięć...
    {
        // Jeżeli nie, to wiemy, że użytkownik pierwszy raz (od mement uruchomienia programu) chce wyświetlić dialog ze szczegółowymi informacjami o jakimś temacie...
        topicDetailsDialog = new TopicDetailsDialog(...);
        // Tutaj inicjalizacja...
        topicDetailsDialog->init();
        //...
    }
    //...
}
Sposób, który przedstawiłem powyżej powołuje obiekty do życia tylko i wyłącznie w momencie, kiedy są potrzebne. Bo po co przydzielać pamięć obiektowi klasy, która odpowiada za obsługę jakiegoś dialogu, z którego użytkownik w ogóle z nie skorzysta? ;)
P-32783
michalp
» 2011-05-07 12:01:07
Usunąłeś (zwolniłeś) pamięć na którą wskazywał wskaźnik (
m_nastepnaOsoba
). Wskaźnik dalej istnieje (dopóki nie wyjdzie z zakresu). Z tym wskaźnikiem możesz robić co chcesz (zmieniać adres na który wskazuje, alokować za jego pomocą nowe komórki pamięci, bądź dealokować o ile adres na który wskazuje jest prawidłowy).
P-32784
marek
Temat założony przez niniejszego użytkownika
» 2011-05-07 12:01:47
Dzięki - wsio paniał
P-32785
« 1 »
  Strona 1 z 1