Table of Contents
What happens when realloc fails?
If realloc cannot find enough space at all, it returns a null pointer, and leaves the previous region allocated. Therefore you would indeed need to free the previously allocated memory still.
What causes realloc to fail?
You haven’t used up your virtual address space, but you’ve fragmented it so badly that no contiguous range of addresses of the requested size are available. This could happen (on a 32-bit machine) if you successfully allocate 6 512MB blocks, free every other one, then try to allocate a 1GB block.
How do you know if realloc failed?
If realloc fails, it returns null pointer, but it doesn’t deallocate the old memory.
Can realloc cause memory leak?
Using realloc() like you are will leak memory if realloc() fails. In that case, it’ll return NULL but will not free the original block. So you will have lost the pointer to the block and cannot free it (unless the pointer is stored elsewhere).
Does realloc always succeed?
No, you cannot assume that. There is no reason for realloc()ing to a smaller size will fail.
Which function is used to change the size of the memory block?
Overview of functions
Function | Description |
---|---|
malloc | allocates the specified number of bytes |
realloc | increases or decreases the size of the specified block of memory, moving it if necessary |
calloc | allocates the specified number of bytes and initializes them to zero |
free | releases the specified block of memory back to the system |
What is realloc return?
Return Value realloc returns a void pointer to the reallocated (and possibly moved) memory block. If there is not enough available memory to expand the block to the given size, the original block is left unchanged, and NULL is returned.
Does realloc initialize to zero?
The memory is set to zero. If nmemb or size is 0, then calloc() returns either NULL, or a unique pointer value that can later be successfully passed to free(). The realloc() function changes the size of the memory block pointed to by ptr to size bytes.