- 1
- 2
for(p=first; p!=NULL; p=p->next)
free(p);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+111
for(p=first; p!=NULL; p=p->next)
free(p);
Освобождаем память всех элементов списка.
Это почему это?
З.Ы. но вроде бы гццшный так не делает, поэтому ты прав, не заметит...
Сшный аллокатор для каждого выделенного блока уже предусматривает место для служебной информации - что-то типа размера выделенного блока. Пасквальный аллокатор был крут и никакой служебной инфы к блоку не добавлял - но требовал что бы код при выделении "помнил" сколько именно памяти было выделено.
с другой стороны, любой мемори дебаггер этот код споймает. даже мой доморощеный - который заполняет освобождаемые блоки poison pattern'ом.
Всё было ещё пиздецовее, на самом деле.
Другое дело, что в паскале два несовместимых механизма назвали одним именем... в этом и жопа.
такая вот перегрузка
getmem и freemem без указания размера это, получается, фишка gnu pascal?
А у Борланда были только getmem и freemem с задаваемыми вручную размерами, поэтому этот код там тупо не скомпилится?
Но пиздец тут в том, что это разные функции для типизированного и нетипизированного указателей!
В крестах free, delete и delete[] для неподов тоже дадут разный результат. И все нормальные программисты используют только парные функции.
Такая некрофилия до добра не доводит.
.
Самое плохое что может случиться - это то, что этот код будет работать без ошибок.