jak toto interpretować??
Ostatnio zmodyfikowano 2011-05-07 12:01
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ł!
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!
|
|
malan |
» 2011-05-07 11:11:01 Druga instrukcja zaś wpisuje NULL do komórki która nie istnieje! |
Na pewno? |
|
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.
|
|
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): TopicListDialog::TopicListDialog() : topicDetailsDialog( 0 ) { }
void TopicListDialog::onShowTopicDetailsEvent(...) { if( !topicDetailsDialog ) { topicDetailsDialog = new TopicDetailsDialog(...); 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? ;) |
|
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). |
|
marek Temat założony przez niniejszego użytkownika |
» 2011-05-07 12:01:47 Dzięki - wsio paniał |
|
« 1 » |