HeapAlloc
HeapAlloc是一个WindowsAPI函数。它用来在指定的堆上分配内存,并且分配后的内存不可移动。
基本信息
- 中文名
HeapAlloc
- 类型
函数
- 语法
HANDLE hHeap
- 参数
dwFlags
语法
LPVOID HeapAlloc(
HANDLE hHeap,
DWORD dwFlags,
SIZE_T dwBytes,
);
参数
要分配堆的句柄,可以通过HeapCreate()函数或GetProcessHeap()函数获得。
堆分配时的可选参数,其值可以为以下的一种或多种:
值 | 意义 |
|---|---|
HEAP_GENERATE_EXCEPTIONS | 如果分配错误将会抛出异常,而不是返回NULL。异常值可能是STATUS_NO_MEMORY, 表示获得的内存容量不足,或是STATUS_ACCESS_VIOLATION,表示存取不合法。 |
HEAP_NO_SERIALIZE | 不使用连续存取 |
HEAP_ZERO_MEMORY | 将分配的内存全部清零 |
要分配堆的字节数。
返回值
如果成功分配内存,返回值为一个指向所分配内存块的首地址的(void*)指针。
如果分配内存失败,并且没有指定HEAP_GENERATE_EXCEPTIONS,则返回NULL。
如果指定了HEAP_GENERATE_EXCEPTIONS,则抛出异常,而不返回NULL:
异常代码 | 描述 |
|---|---|
STATUS_NO_MEMORY | 由于缺少可用内存或者是堆损坏导致分配失败 |
STATUS_ACCESS_VIOLATION | 由于堆损坏或者是不正确的函数参数导致分配失败 |