realloc
is used to reallocate the memory dynamically.
Suppose I have allocated 7 bytes using the malloc
function and now I want to extend it to 30 bytes.
What will happen in the background if there is no sequential (continously in a single row) space of 30 bytes in the memory?
Is there any error or will memory be allocated in parts?
realloc
works behind the scenes roughly like this:
NULL
.So, you can test for failure by testing for NULL
, but be aware that you don't overwrite the old pointer too early:
int* p = malloc(x);
/* ... */
p = realloc(p, y); /* WRONG: Old pointer lost if realloc fails: memory leak! */
/* Correct way: */
{
int* temp = realloc(p, y);
if (NULL == temp)
{
/* Handle error; p is still valid */
}
else
{
/* p now possibly points to deallocated memory. Overwrite it with the pointer
to the new block, to start using that */
p = temp;
}
}