函数功能:
HeapAlloc 函数从堆中分配一块内存。分配的内存不可移动。
函数原型:
DECLSPEC_ALLOCATOR LPVOID HeapAlloc(
[in] HANDLE hHeap,
[in] DWORD dwFlags,
[in] SIZE_T dwBytes
);
参数解析:
参数 | 含义 | |
---|---|---|
hHeap | 要分配内存的堆的句柄。该句柄由HeapCreat函数或GetProcessHeap函数返回。 | |
dwFlags | 堆分配选项。指定这些值中的任何一个都将覆盖使用HeapCreate创建堆时指定的相应值 。此参数可以是以下值中的一个或多个。 | |
值 | 含义 | |
HEAP_GENERATE_EXCEPTIONS (0x00000004) | 若指定了该值,调用HeapAlloc函数和HeapReAlloc函数失败时返回具体的错误代码,而不是返回NULL | |
HEAP_NO_SERIALIZE (0x00000001) | 若指定了该值,这样建立的堆不会进行独占性检测,访问速度可以更快 | |
HEAP_ZERO_MEMORY (0x00000008) | 分配的内存将被初始化为零。否则,内存不会被初始化为零。 | |
dwBytes | 要分配的内存块的字节数 |
返回值:
如果函数成功,则返回值是指向已分配内存块的指针。
如果函数失败并且您没有指定HEAP_GENERATE_EXCEPTIONS,则返回值为NULL,
如果函数失败并且您已指定HEAP_GENERATE_EXCEPTIONS,则该函数可能会生成下表中列出的异常之一。
异常代码 | 描述 |
---|---|
STATUS_NO_MEMORY | 由于缺少可用内存或堆损坏,分配尝试失败。 |
STATUS_ACCESS_VIOLATION | 由于堆损坏或不正确的函数参数,分配尝试失败。 |