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