出于某种原因,我想手动滚动一个归零版本的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();
}