我有代码,由于各种原因,我正在尝试从C运行时移植到使用Windows Heap API的代码。我遇到了一个问题:如果我将malloc
/ calloc
/ realloc
/ free
次来电重定向到HeapAlloc
/ HeapReAlloc
/ {{一些(句子为HeapFree
),内存似乎被正确分配(没有返回错误的指针,也没有抛出异常),但是我正在移植的库说“为某些人分配了内存”原因。
我已经尝试过使用Microsoft CRT(使用下面的Heap API)和另一家公司的运行时库(使用下面的Global Memory API);两者的malloc适用于库,但由于某些原因,直接使用Heap API不起作用。
我已经检查过分配不是太大(> = 0x7FFF8字节),而它们不是。
我能想到的唯一问题是内存对齐;那是这样吗?或者除此之外,Heap API和我不知道的CRT内存API有根本区别吗?
如果是这样,它是什么?如果没有,那么为什么 static Microsoft CRT(Visual Studio附带)在调用GetProcessHeap
之前在malloc
/ calloc
中采取了一些额外的步骤?我怀疑存在差异,但我想不出它可能是什么。
谢谢!
答案 0 :(得分:3)
当我发现困难的方式......
差异不是根本,但HeapReAlloc
(使用RtlReAllocateHeap
)不会自动将空指针视为提示调用HeapAlloc
;它失败了。
答案 1 :(得分:0)
另一个重要区别:
void *ptr = NULL;
HeapFree(GetProcessHeap(), 0, ptr);
void *ptr = NULL;
free(ptr);
定义明确(no operation performed)。