This shows you the differences between two versions of the page.
— |
c:stdlib.h:realloc [2024/02/16 01:04] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | {{keywords>wiki library source code example reference}} | ||
+ | ===== realloc ===== | ||
+ | <code c> | ||
+ | #include <stdlib.h> | ||
+ | void *realloc(void *ptr, size_t size); | ||
+ | </code> | ||
+ | === description === | ||
+ | The realloc() function shall change the size of the memory object pointed to by ptr to the size specified by size. \\ | ||
+ | The contents of the object shall remain unchanged up to the lesser of the new and old sizes. \\ | ||
+ | If the new size of the memory object would require movement of the object, the space for the previous instantiation of the object is freed.\\ | ||
+ | If the new size is larger, the contents of the newly allocated portion of the object are unspecified.\\ | ||
+ | If size is 0 and ptr is not a null pointer, the object pointed to is freed. If the space cannot be allocated, the object shall remain unchanged.\\ | ||
+ | \\ | ||
+ | If ptr is a null pointer, realloc() shall be equivalent to malloc() for the specified size.\\ | ||
+ | \\ | ||
+ | If ptr does not match a pointer returned earlier by calloc(), malloc(), or realloc() or if \\ | ||
+ | the space has previously been deallocated by a call to free() or realloc(), the behavior is undefined.\\ | ||
+ | |||
+ | The order and contiguity of storage allocated by successive calls to realloc() is unspecified. \\ | ||
+ | The pointer returned if the allocation succeeds shall be suitably aligned so that it may be assigned \\ | ||
+ | to a pointer to any type of object and then used to access such an object in the space allocated \\ | ||
+ | (until the space is explicitly freed or reallocated). Each such allocation shall yield a pointer to an object disjoint from any other object.\\ | ||
+ | The pointer returned shall point to the start (lowest byte address) of the allocated space. If the space cannot be allocated, a null pointer shall be returned.\\ | ||
+ | |||
+ | === return value === | ||
+ | Upon successful completion with a size not equal to 0, realloc() shall return a pointer to the (possibly moved) allocated space.\\ | ||
+ | If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned.\\ | ||
+ | If there is not enough available memory, realloc() shall return a null pointer and set errno to [ENOMEM].\\ | ||
+ | |||
+ | |||
+ | ===== realloc c Example ===== | ||
+ | <code c> | ||
+ | /* | ||
+ | * realloc example code | ||
+ | * http://code-reference.com/c/stdlib.h/realloc | ||
+ | */ | ||
+ | #include <stdio.h> /* including standard library */ | ||
+ | //#include <windows.h> /* uncomment this for Windows */ | ||
+ | |||
+ | #include <stdlib.h> | ||
+ | |||
+ | int testit ( int *x ) | ||
+ | { | ||
+ | if (x != NULL) { | ||
+ | printf("malloc / realloc of memory was successfully.\n"); | ||
+ | } | ||
+ | else { | ||
+ | printf("allocation of memory failed.\n"); | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | int main ( void ) | ||
+ | { | ||
+ | int *buffer; | ||
+ | printf("set buffer to 100 * sizeof(int)\n"); | ||
+ | buffer = (int*) malloc (10*sizeof(int)); | ||
+ | testit(buffer); | ||
+ | |||
+ | printf("set buffer to 10 * sizeof(int)\n"); | ||
+ | buffer = (int*) realloc (buffer,10*sizeof(int)); | ||
+ | testit(buffer); | ||
+ | |||
+ | printf("try to free the buffer\n"); | ||
+ | free (buffer); | ||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== Output ==== | ||
+ | user@host:~$ ./realloc | ||
+ | set buffer to 100 * sizeof(int) | ||
+ | malloc / realloc of memory was successfully. | ||
+ | set buffer to 10 * sizeof(int) | ||
+ | malloc / realloc of memory was successfully. | ||
+ | try to free the buffer | ||
+ | |||