Allocates the specified number of bytes from the heap.
Note The local functions have greater overhead and provide fewer features than other memory management functions. New applications should use the
heap functions unless documentation states that a local function should be used. For more information, see Global and Local Functions.
Syntax
HLOCAL WINAPI LocalAlloc(
__in UINT uFlags,
__in SIZE_T uBytes
);
Parameters
- uFlags [in]
-
The memory allocation attributes. The default is the LMEM_FIXED value. This parameter can be one or more of the following values, except for the incompatible combinations that are specifically noted.
| Value | Meaning |
- LHND
- 0x0042
| Combines LMEM_MOVEABLE and LMEM_ZEROINIT.
|
- LMEM_FIXED
- 0x0000
| Allocates fixed memory. The return value is a pointer to the memory object.
|
- LMEM_MOVEABLE
- 0x0002
| Allocates movable memory. Memory blocks are never moved in physical memory, but they can be moved within the default heap.
The return value is a handle to the memory object. To translate the handle to a pointer, use the
LocalLock function.
This value cannot be combined with LMEM_FIXED.
|
- LMEM_ZEROINIT
- 0x0040
| Initializes memory contents to zero.
|
- LPTR
- 0x0040
| Combines LMEM_FIXED and LMEM_ZEROINIT.
|
- NONZEROLHND
| Same as LMEM_MOVEABLE.
|
- NONZEROLPTR
| Same as LMEM_FIXED.
|
The following values are obsolete, but are provided for compatibility with 16-bit Windows. They are ignored.
- LMEM_DISCARDABLE
- LMEM_NOCOMPACT
- LMEM_NODISCARD
- uBytes [in]
-
The number of bytes to allocate. If this parameter is zero and the uFlags parameter specifies LMEM_MOVEABLE, the function returns a handle to a memory object that is marked as discarded.
Return Value
If the function succeeds, the return value is a handle to the newly allocated memory object.
If the function fails, the return value is NULL. To get extended error information, call
GetLastError.
Remarks
Windows memory management does not provide a separate local heap and global heap. Therefore, the LocalAlloc and GlobalAlloc functions are essentially the same.
The movable-memory flags LHND, LMEM_MOVABLE, and NONZEROLHND add unnecessary overhead and require locking to be used safely. They should be avoided unless documentation specifically states that they should be used.
New applications should use the
heap functions unless the documentation specifically states that a local function should be used. For example, some Windows functions allocate memory that must be freed with LocalFree.
If the heap does not contain sufficient free space to satisfy the request,
LocalAlloc returns NULL. Because NULL is used to indicate an error, virtual address zero is never allocated. It is, therefore, easy to detect the use of a NULL pointer.
If the LocalAlloc function succeeds, it allocates at least the amount requested. If the amount allocated is greater than the amount requested, the process can use the entire amount. To determine the actual number of bytes allocated, use the
LocalSize function.
To free the memory, use the
LocalFree function. It is not safe to free memory allocated with LocalAlloc using GlobalFree.
Examples
The following code shows a simple use of LocalAlloc and LocalFree.
#include <windows.h>
#include <stdio.h>
void _cdecl main()
{
LPTSTR pszBuf=NULL;
pszBuf = (LPTSTR)LocalAlloc(
LPTR,
MAX_PATH*sizeof(TCHAR));
// Handle error condition
if( pszBuf == NULL )
{
printf("LocalAlloc failed (%d)\n", GetLastError());
return;
}
//see how much memory was allocated
printf("LocalAlloc allocated %d bytes\n", LocalSize(pszBuf));
// Use the memory allocated
// Free the memory when finished with it
LocalFree(pszBuf);
}
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | Winbase.h (include Windows.h) |
| Library | Kernel32.lib |
| DLL | Kernel32.dll |
See Also
- Global and Local Functions
- Heap Functions
- LocalFree
- LocalLock
- LocalReAlloc
- LocalSize
- Memory
Management Functions
Send comments about this topic to Microsoft
Build date: 9/17/2009