Aktywne Wpisy

dumelosw +243
Biedna mama ( ͡° ʖ̯ ͡°)
#sylwiaperetti #krolowazenady #paczkaperetki #p3retti #krakow #wypadek #l--------------c #krolowezycia #polsat
#sylwiaperetti #krolowazenady #paczkaperetki #p3retti #krakow #wypadek #l--------------c #krolowezycia #polsat
źródło: 83308
Pobierz
Wesol96 +491
Treść przeznaczona dla osób powyżej 18 roku życia...





for (void * ptr : list) {delete ptr;
ptr = 0;
}
row.removeAll(0);
to DLACZEGO to zadziała? Tzn. bo działa ale wg mnie powinienem podać w pętli for referencję do wskaźnika, a tak to wskaźnik ptr jest kopią tego z listy więc przypisanie mu wartości 0 nie powinno działać. Ew. jak zrobić tak by nie działało? Tzn. wiem, że delete bez przypisania to trochę bez sensu ale teoretycznie taka możliwość powinna istnieć, nie? #programowanie
rzeczywiście, ptr jest w tym przypadku kopią wskaźnika. Natomiast działa to w połowie tak jak chcesz - tworzona jest kopia wskaźnika ptr, zwalniana jest pamięc pod tą kopią (równocześnie pod oryginałem - przecież wskazują na ten sam obszar pamięci. Poźniej przypisujesz NULLa do kopii, nie do oryginału. Jeśli chcesz również przypisać NULLa do oryginału, to musisz zrobić tak jak napisałeś - referencje
http://ideone.com/beeCcA
takie zachowanie generuje UB - undefinied behaviour. Może stać się cokolwiek. Może zadziałać dobrze, może wywalić się w tym miejscu a może działać jeszcze rok i wywalić się zupełnie gdzie indziej