Привет, ЛОР!
Ты, наверное, уже видел свежую дыру в Xorg, патч для которой выглядит буквально вот так:
- else
+ else {
free(to->button->xkb_acts);
+ to->button->xkb_acts = NULL;
+ }
В связи с этим у меня возник вопрос: а почему в стандартной библиотеке C нет макроса SAFE_FREE()?
#define SAFE_FREE(ptr) do{free(ptr);(ptr)=NULL;}while(0)
Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту. Не только значение памяти, на которое он указывает, но и значение самого указателя, и работа с ним представляет собой жуткое undefined behaviour, а значит единственное что можно сделать – занулить его.
Так вот, почему даже таких банальных вещей нет? Я уже не говорю про строковый тип, а то даже Эдичка тут строки не осилил.
Моя гипотеза тут: C – это язык культа страданий во имя страданий.