_srealloc()
Allocate, reallocate or free a block of memory
Synopsis:
#include <malloc.h> void *_srealloc( void* ptr, size_t old_size, size_t new_size );
Arguments:
- ptr
- NULL, or a pointer to the block of memory that you want to reallocate.
- old_size
- The current size of the block, in bytes.
- new_size
- The size of the block to allocate, in bytes.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
When the value of the ptr argument is NULL, a new block of memory of new_size bytes is allocated.
If the value of new_size is zero, the corresponding _sfree() function is called to release old_size bytes of memory memory pointed to by ptr.
Otherwise, the _srealloc() function reallocates space for an object of new_size bytes by doing one of the following:
- Shrinking the allocated size of the allocated memory block
ptr when new_size is sufficiently smaller than
old_size.
Or:
- Extending the allocated size of the allocated memory block
ptr if there is a large enough block of unallocated memory
immediately following ptr.
Or:
- Allocating a new block, and copying the contents of ptr to the new block.
The function returns NULL when the memory pointed to by ptr can't be reallocated. In this case, the memory pointed to by ptr isn't freed, so be sure to keep a pointer to the old memory block.
buffer = (char *) _srealloc( buffer, 100, 200 );
In the above example, buffer is set to NULL if the function fails, and no longer points to the old memory block. If buffer is your only pointer to the memory block, then you've lost access to this memory.
The _srealloc() function reallocates memory from the heap.
You must use _sfree() to deallocate the memory allocated by _srealloc().
Returns:
A pointer to the start of the reallocated memory, or NULL if there's insufficient memory available, or if the value of the new_size argument is zero.
Classification:
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |