From RAD Studio
Jump to: navigation, search

Go Up to malloc.h Index

Header File



void *_expand(void *block, size_t size);


Grows or shrinks a heap block in place.

This function attempts to change the size of an allocated memory block without moving the block's location in the heap. The data in the block are not changed, up to the smaller of the old and new sizes of the block. The block must have been allocated earlier with malloc, calloc, or realloc, and must not have been freed.

Return Value

If _expand is able to resize the block without moving it, _expand returns a pointer to the block, whose address is unchanged. If _expand is unsuccessful, it returns a NULL pointer and does not modify or resize the block.


POSIX ANSI C ANSI C++ Win32 Win64 macOS
_expand +


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

void main(void) {
    char *bufchar, *newbuf;
    printf("Allocate a 512 element buffer\n");
    if ((bufchar = (char *) calloc(512, sizeof(char))) == NULL)
    printf("Allocated %d bytes at %Fp\n", _msize(bufchar),
        (void __far *)bufchar);
    if ((newbuf = (char *) _expand(bufchar, 1024)) == NULL)
        printf("cannot expand");
    else {
        bufchar = newbuf;
        printf(" Expanded block to %d bytes at %Fp\n", _msize(bufchar),
            (void __far *)bufchar);