Name

realloc

Synopsis

Resizes an allocated memory block

#include <stdlib.h>
void *realloc( void *ptr, size_t n );

The realloc() function replaces a memory block dynamically allocated by malloc(), calloc() or realloc() with a new one of size n, and copies the contents of the previous block to the new block, to the extent that the two blocks’ sizes permit. If the new block is larger, the values of the remaining bytes are undetermined. The pointer argument passed to realloc() is the address of the block previously allocated, and the function’s return value is the address of the new block. The new block may or may not begin at the same address as the old block. realloc() returns a null pointer if the new block could not be allocated as requested; in this case, it does not release the old block, and your program can continue using it.

If the first argument is a null pointer, realloc() allocates a new memory block, behaving similarly to malloc(). Otherwise, if the pointer argument does not point to a memory block allocated by malloc(), calloc(), or realloc(), or if it points to such a block that has since been released by a call to free() or realloc(), then the behavior is undefined.

Example

typedef struct { int len; float array[ ]; } DynArray_t; DynArray_t *daPtr = malloc( sizeof(DynArray_t) + 10*sizeof(float) ); if ( daPtr == NULL ) exit -1; daPtr->len = 10; for ( int i = 0; i < daPtr->len; ++i ) daPtr->array[i] = 1.0F/(i+1); /* daPtr->array[10] = 0.1F // Invalid array index! */ DynArray_t ...

Get C in a Nutshell now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.