Allocate, reallocate, or free a block of memory
#include <stdlib.h> void* realloc( void* old_blk, size_t size );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The realloc() function allocates, reallocates, or frees the block of memory specified by old_blk based on the following rules. You can control parts of this behavior via the MALLOC_OPTIONS environmental variable.
The default behavior in this case changed in QNX Neutrino 6.4.1. |
If the value of MALLOC_OPTIONS contains an R or a V, realloc() calls free() to release the memory pointed to by old_blk, and then returns NULL. This is the way QNX Neutrino 6.4.0 and earlier behaved.
The realloc() function allocates memory from the heap. Use free() or realloc() to free the block of memory.
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 you can free it 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 );
A pointer to the start of the allocated memory, or NULL if an error occurred (errno is set).
#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; }
Function | Default | V | R |
---|---|---|---|
calloc(n, 0) | Non-NULL | NULL | No effect |
malloc(0) | Non-NULL | NULL | No effect |
realloc(NULL, 0) | Non-NULL | NULL | No effect |
realloc(non-NULL, 0) | Non-NULL | NULL | NULL |
In all the above cases, if the function returns a non-NULL pointer, it's valid only for a corresponding call to free() or realloc().
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |
calloc(), free(), malloc(), sbrk()