Reallocates the memory pointed to by
mem, so that it now has space for
n_bytes bytes of memory.
It returns the new address of the memory, which may have been moved.
mem may be null, in which
case it's considered to have zero-length.
n_bytes may be 0, in which case null will be returned
mem will be freed unless it is null.
the memory to reallocate
new size of the memory in bytes
the new address of the allocated memory