HeapReAlloc
The HeapReAlloc
function reallocates a block of memory from a heap. This function enables you
to resize a memory block and change other memory block properties. The
allocated memory is not movable.
LPVOID HeapReAlloc(
HANDLE hHeap, |
// handle to a heap
block |
DWORD dwFlags, |
// heap
reallocation flags |
LPVOID lpMem, |
// pointer to the
memory to reallocate |
DWORD dwBytes |
// number of bytes
to reallocate |
); |
|
Parameters
hHeap
Specifies the
heap from which the memory will be reallocated. This is a handle returned by
the HeapCreate
dwFlags
Specifies
several controllable aspects of heap reallocation. Specifying any of these
flags will override the corresponding flag specified in the flOptions
parameter when the heap was created by using the HeapCreate
Flag |
Meaning |
HEAP_GENERATE_EXCEPTIONS |
Specifies
that the operating-system will raise an exception to indicate a function
failure, such as an out-of-memory condition, instead of returning NULL. |
HEAP_NO_SERIALIZE |
Specifies
that mutual exclusion will not be used while this function is accessing the
heap. For more information about HEAP_NO_SERIALIZE, see the Remarks section
of HeapCreate |
HEAP_REALLOC_IN_PLACE_ONLY |
Specifies
that there can be no movement when reallocating a memory block to a larger
size. If this flag is not specified and the reallocation request is for a
larger size, the function may move the block to a new location. If this flag
is specified and the block cannot be enlarged without moving, the function
will fail, leaving the original memory block unchanged. |
HEAP_ZERO_MEMORY |
If the
reallocation request is for a larger size, this flag specifies that the
additional region of memory beyond the original size will be initialized to
zero. The contents of the memory block up to its original size are
unaffected. |
lpMem
Points to the
block of memory that the function reallocates. This pointer is returned by an
earlier call to the HeapAlloc
dwBytes
Specifies the
new size of the memory block, in bytes. A memory block s size can be increased
or decreased by using this function.
If the heap
specified by the hHeap parameter is a non-growable heap, dwBytes
must be less than 0x7FFF8. You create a non-growable heap by calling the HeapCreate
function with a nonzero value.
Return Values
If the
function succeeds, the return value is a pointer to the reallocated memory
block.
If the
function fails and you have not specified HEAP_GENERATE_EXCEPTIONS, the return
value is NULL.
If the
function fails and you have specified HEAP_GENERATE_EXCEPTIONS, the function
may generate the following exceptions:
Value |
Meaning |
STATUS_NO_MEMORY |
The
reallocation attempt failed for lack of available memory. |
STATUS_ACCESS_VIOLATION |
The
reallocation attempt failed because of heap corruption or improper function
parameters. |
If the
function fails, it calls SetLastError
Remarks
If HeapReAlloc
succeeds, it allocates at least the amount of memory requested. If the actual
amount allocated is greater than the amount requested, the process can use the
entire amount. To determine the actual size of the reallocated block, use the HeapSize
function.
To free a
block of memory allocated by HeapReAlloc, use the HeapFree
function.
See Also