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