Aktywne Wpisy

alexander-dantes +409

bartlomiej_rakowski +220
Ja już gotowy, pół godziny mi zajęło zapakowanie butelek, tj. odkręcenie każdej, nadmuchanie, zakręcenie i ułożenie do wora (bo po pół roku co poniektóre się mocno zassały). Aż musiałem wziewy wziąć bo mnie płuca i krtań spuchła od dęcia w butle xD Wyszły 3x pełne worki 150L. Już wiem, że nie dostanę za to 150 zł, a z 15 zł bo bym ich z torbami puścił xD dzięki @ChlopoRobotnik2137 za weryfikację.
źródło: Zdjęcie z biblioteki
Pobierz





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