_expand

De RAD Studio
Aller à : navigation, rechercher

Remonter à Process.h - Index


Header File

process.h

Category

Memory Routines

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.

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);
 }



Portability



POSIX Win32 ANSI C ANSI C++

+