An allocation function attempts to allocate the requested amount of
storage
. If it is successful, it returns the address of the start
of a block of storage whose length in bytes is at least as large
as the requested size
. The order,
contiguity, and initial value of storage allocated by successive calls
to an allocation function are unspecified
. Even if the size of the space
requested is zero, the request can fail
. If the request succeeds, the
value returned by a replaceable allocation function
is a non-null pointer value (
[basic.compound])
p0 different from any previously returned value
p1,
unless that value
p1 was subsequently passed to a
replaceable deallocation function
. Furthermore, for the library allocation functions
in
[new.delete.single] and
[new.delete.array],
p0 represents the address of a block of storage disjoint from the storage
for any other object accessible to the caller
. The effect of indirecting through a pointer
returned from a request for zero size is undefined
.