Мелкий пошел баг. Не эпичный. Да и не баг это вовсе. Компилятор же, небось, идиотское присваивание. А что касается проверки на NULL - ну кто их знает - может, они миллионами NULL указатели освобождают в цикле. Сэкономил миллион вызовов free() - спас дерево. :)
Компилятор же, небось, идиотское присваивание. ...удалит при оптимизации? Пользователю функции от этого не легче. Не говоря уже о том, что в случае повторного вызова с тем же prt наверняка прилетит SIGSEGV.
Лично я, как пользователь, был уверен - это дифайн (ну капсом же, да и логика подсказывает). Стоило это мне два часа отладки и разочарования в людях...
Comments 19
#define FREE free
Reply
Reply
Reply
Reply
static inline void FREE(void* const ptr )
все могло бы сложиться иначе!
Reply
Reply
А что касается проверки на NULL - ну кто их знает - может, они миллионами NULL указатели освобождают в цикле. Сэкономил миллион вызовов free() - спас дерево. :)
Reply
...удалит при оптимизации? Пользователю функции от этого не легче. Не говоря уже о том, что в случае повторного вызова с тем же prt наверняка прилетит SIGSEGV.
Лично я, как пользователь, был уверен - это дифайн (ну капсом же, да и логика подсказывает). Стоило это мне два часа отладки и разочарования в людях...
Reply
Сделайте template и T*& ptr.
Reply
ЗЫ и да, хидер - где была определена функция - используется еще и в pure C, так что передача по ссылке не годится.
Reply
Leave a comment