Example (_udefault -- Change the Default Heap) (Windows)

This example creates a fixed-size heap myheap and uses _udefault to make it the default heap. The call to malloc then allocates memory from myheap. The second call to _udefault restores the original default heap.

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <umalloc.h>
int main(void)
{
   void    *initial_block;
   Heap_t  myheap, old_heap;
   char    *p;
   /* Call VirtualAlloc to get the initial block of memory */
   if (NULL == (initial_block =
       VirtualAlloc(NULL, 65536, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE)))
   {
      printf("VirtualAlloc error: %d\n.", GetLastError());
      exit(EXIT_FAILURE);
   }
   /* Create a fixed size heap starting with the block declared earlier */
   if (NULL == (myheap = _ucreate(initial_block, 65536, _BLOCK_CLEAN,
                                  _HEAP_REGULAR, NULL, NULL))) {
      puts("_ucreate failed.");
      exit(EXIT_FAILURE);
   }
   if (0 != _uopen(myheap)) {
      puts("_uopen failed.");
      exit(EXIT_FAILURE);
   }
   /* myheap is used as default heap */
   old_heap = _udefault(myheap);
   /* malloc will allocate memory from myheap */
   p = (char *)malloc(100);
   memset(p, 'x', 10);
   /* Restore original default heap */
   _udefault(old_heap);
   free(p);
   if (0 != _uclose(myheap)) {
      puts("_uclose failed");
      exit(EXIT_FAILURE);
   }
   if (FALSE == VirtualFree(initial_block, 0, MEM_RELEASE)) {
      printf("VirtualFree error: %d\n.", GetLastError());
      exit(EXIT_FAILURE);
   }
   return 0;
}