По той или иной причине я хочу вручную свернуть нулевую версию malloc(). Чтобы свести к минимуму алгоритмическую сложность, я хочу написать:
void * my_calloc(size_t size)
{
return memset(malloc(size), 0, size);
}
Является ли это корректным, когда size == 0? Хорошо называть malloc() нулевым размером, но это позволяет ему возвращать нулевой указатель. Будет ли следующий вызов memset в порядке или это поведение undefined, и мне нужно добавить условный if (size)?
Я бы очень хотел избежать избыточных условных проверок!
Предположим, что malloc() не терпит неудачу. На самом деле там будет и ручная версия malloc(), которая завершится с ошибкой.
Что-то вроде этого:
void * my_malloc(size_t size)
{
void * const p = malloc(size);
if (p || 0 == size) return p;
terminate();
}
суб >