_expand

From Appmethod Topics
Jump to: navigation, search

Go Up to malloc.h Index


Header File

malloc.h

Prototype

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

Description

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.

Portability

POSIX ANSI C ANSI C++ Win32 Win64 OS X
_expand +

Example

#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)
        exit(1);
    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);
    }
    free(bufchar);
    exit(0);
}