`ASSERT(size == 0 || result != NULL);` Won't this assertion fail when you try to allocate anything more than 0 bytes? Shouldn't it be ASSERT(size != 0 || result != NULL)? If this is intentional, can you explain why?