问题在标题中......我搜索但找不到任何东西。
编辑:
我真的认为没有必要解释这一点,但是因为人们认为我所说的没有意义(而且我问错了问题),所以问题就在这里:
由于人们似乎对所有问题的“根本”原因非常感兴趣,而不是对所提出的实际问题感兴趣(因为这显然有助于更好地解决问题,让我们看看是否有效),问题就在这里:
我正在尝试创建一个基于 NTDLL.dll 的 D 运行时库,以便我可以将该库用于 Win32 子系统以外的子系统。所以这迫使我只链接 NTDLL.dll。
是的,我知道这些功能是“未记录的”并且可能随时更改(即使我打赌一百美元,从现在起 20 年后wcstombs
仍然会做同样的事情,如果它仍然存在的话)。是的,我知道人们(尤其是微软)不喜欢链接到那个库的开发人员,我可能会因为这里而受到批评。是的,以上两点意味着在 Win32 子系统之前运行的 chkdsk 和碎片整理程序等程序甚至不应该首先创建,因为实际上不可能与 kernel32.dll 或 msvcrt.dll 之类的任何东西链接,并且仍然有 NT-native 可执行文件,所以我们开发人员应该假装这些阶段是我们永远无法企及的。
但是不,我怀疑这里的任何人都希望我粘贴几千行代码并帮助我查看它们并试图弄清楚为什么没有失败的内存分配被我正在修改的源代码拒绝。所以这就是为什么我问了一个与“根本”原因不同的问题,尽管这被认为是社区的最佳实践。
如果事情仍然没有意义,请随时在下面发表评论!:)
编辑2:
经过大约 8 个小时的调试,我终于找到了问题所在:
事实证明,如果给它的指针是,RtlReAllocateHeap()
它不会自动工作。RtlAllocateHeap()
NULL