由于各种原因,我正在尝试将代码从 C 运行时移植到使用 Windows 堆 API 的代码。我遇到了一个问题:如果我重定向malloc
/calloc
/realloc
/free
打电话给HeapAlloc
/HeapReAlloc
/HeapFree
(with GetProcessHeap
对于句柄),内存似乎分配正确(没有返回错误指针,也没有抛出异常),但我正在移植的库由于某种原因说“无法分配内存”。
我已经尝试过使用 Microsoft CRT(它使用下面的堆 API)和另一家公司的运行时库(它使用下面的全局内存 API);这两者的 malloc 都可以很好地与库配合使用,但由于某种原因,直接使用堆 API 不起作用。
我检查过分配量并不太大(>= 0x7FFF8 字节),事实并非如此。
我能想到的唯一问题是内存对齐;是这样吗?或者除此之外,堆 API 和 CRT 内存 API 之间是否存在我不知道的根本区别?
如果是这样,那是什么?如果不是,那么为什么staticMicrosoft CRT(包含在 Visual Studio 中)采取了一些额外的步骤malloc
/calloc
打电话之前HeapAlloc
?我怀疑有什么不同,但我想不出它可能是什么。
谢谢你!
当我艰难地发现...
区别不是根本性的,但是HeapReAlloc
(它使用RtlReAllocateHeap
) does not自动将空指针视为调用提示HeapAlloc
;它反而失败了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)