По той или иной причине я хочу вручную свернуть нулевую версию 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();
}
суб >