6.19.29 realloc Function
Changes the size of an allocated block of memory.
Include
<stdlib.h>
Prototype
void *realloc(void * ptr, size_t size);
Arguments
ptr
- pointer to object to deallocate
- size
- number of byte to allocate
Return Value
Returns a pointer to the allocated space if successful; otherwise, returns a null pointer.
Remarks
The function deallocates the memory consumed by the object pointed to by ptr
and returns a pointer to a new object with the specified size and with the same contents of
the old object prior to deallocation, up to the lesser of the previous and new sizes. If the
size of the new object is larger than that of the previous object, the additional bytes have
indeterminate values.
When using the simple implementation of dynamic memory allocation, reallocating memory will always result in a new allocation being made, regardless of the size of the new memory block.
If ptr
is a null pointer, a call to realloc()
behaves like
one to malloc()
with the specified size. The value of ptr
must otherwise match a pointer returned by the calloc()
,
malloc()
, or realloc()
function, and the memory at that
address must not have been deallocated by a call to the free()
or
realloc()
function; otherwise, the behavior is undefined. If memory for the
new object cannot be allocated, the old object is not deallocated and its value is
unchanged.
See your MPLAB XC compiler User's Guide for more information on dynamic memory allocation.
Example
#include <stdlib.h>
#include <stdio.h>
int
main(void)
{
int * block = NULL; /* assigned NULL so first realloc works as malloc */
int x;
unsigned size = 0;
while(size != 10) {
x = rand();
if(x < RAND_MAX / 1000) {
size++;
block = realloc(block, size);
if(block == NULL)
break;
block[size-1] = x;
}
}
do {
printf("%d ", block[size-1]);
} while(--size);
printf("\n");
}
Example Output
456291 198011 524209 13456 84083 591308 86383 1887638 1277844 16807