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
.