for connected embedded systems
![]() |
![]() |
![]() |
![]() |
realloc()
Allocate, reallocate, or free a block of memory
Synopsis:
#include <stdlib.h>
void* realloc( void* old_blk,
size_t size );
Arguments:
- old_blk
- A pointer to the block of memory to be allocated, reallocated, or freed.
- size
- The new size, in bytes, for the block of memory.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The realloc() function allocates, reallocates, or frees the block of memory specified by old_blk based on the following rules:
- If old_blk is NULL, a new block of memory of size bytes is allocated.
- If the size is zero, the free() function is called to release the memory pointed to by old_blk.
- Otherwise, realloc() reallocates space
for an object of size bytes by:
- shrinking the size of the allocated memory block old_blk when size is smaller than the current size of old_blk
- extending the allocated size of the allocated memory block old_blk if there is a large enough block of unallocated memory immediately following old_blk
- allocating a new block with the appropriate size, and copying the contents of old_blk to this new block
The realloc() function allocates memory from the heap.
![]() |
Because it's possible that a new block will be allocated, any pointers into the old memory could be invalidated. These pointers will point to freed memory, with possible disastrous results, when a new block is allocated. |
The realloc() function returns NULL when the memory pointed to by old_blk can't be reallocated. In this case, the memory pointed to by old_blk isn't freed, so be careful to maintain a pointer to the old memory block so it can be freed later.
In the following example, buffer is set to NULL if the function fails, and won't point to the old memory block. If buffer is your only pointer to the memory block, then you have lost access to this memory.
buffer = (char* )realloc( buffer, 100 );
Returns:
A pointer to the start of the allocated memory, or NULL if an error occurred (errno is set).
Errors:
- ENOMEM
- Not enough memory.
- EOK
- No error.
Examples:
#include <stdlib.h>
#include <malloc.h>
int main( void )
{
char* buffer;
char* new_buffer;
buffer = (char* )malloc( 80 );
new_buffer = (char* )realloc( buffer, 100 );
if( new_buffer == NULL ) {
/* not able to allocate larger buffer */
return EXIT_FAILURE;
} else {
buffer = new_buffer;
}
return EXIT_SUCCESS;
}
Classification:
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | No |
| Thread | Yes |
See also:
calloc(), free(), malloc(), sbrk()
![]() |
![]() |
![]() |
![]() |

![[Previous]](../prev.gif)
![[Contents]](../contents.gif)
![[Index]](../keyword_index.gif)
![[Next]](../next.gif)
