なんらかの理由で、 のゼロ化バージョンを手動でロールしたいと考えていmalloc()
ます。アルゴリズムの複雑さを最小限に抑えるために、次のように記述します。
void * my_calloc(size_t size)
{
return memset(malloc(size), 0, size);
}
これはいつ明確に定義されていsize == 0
ますか? サイズ 0で呼び出しmalloc()
ても問題ありませんが、これにより null ポインターが返される可能性があります。の後続の呼び出しはmemset
問題ありませんか、それとも未定義の動作であり、条件を追加する必要がありますif (size)
か?
冗長な条件チェックを避けたいと思います!
malloc()
今のところ、失敗しないと仮定してください。実際にはmalloc()
、失敗すると終了する手巻きバージョンもあります。
このようなもの:
void * my_malloc(size_t size)
{
void * const p = malloc(size);
if (p || 0 == size) return p;
terminate();
}