void* realloc(void *__ptr, size_t __size) __ATTR_MALLOC__
The realloc() function tries to change the size of the region
allocated at ptr to the new
size value. It returns a pointer to the new region.
The returned pointer might be the same as the old pointer, or a pointer to a completely
different region.
The contents of the returned region up to either the old or the new size value (whatever is less) will be identical to the contents of the old region, even in case a new region had to be allocated.
It is acceptable to pass ptr as NULL, in which case
realloc() will behave identical to malloc().
If the new memory cannot be allocated, realloc() returns NULL, and the region at ptr
will not be changed.