Вопрос в заголовке... Я искал, но ничего не нашел.
Редактировать:
Я действительно не вижу необходимости объяснять это, но поскольку люди думают, что то, что я говорю, не имеет смысла (и что я задаю неправильные вопросы), вот в чем проблема:
Поскольку люди, кажется, очень интересуются «коренной» причиной всех проблем, а не фактическим заданным вопросом (поскольку это, по-видимому, помогает решить проблему лучше, давайте посмотрим, так ли это), вот проблема :
Я пытаюсь создать библиотеку времени выполнения D на основе NTDLL.dll, чтобы использовать эту библиотеку для подсистем, отличных от подсистемы Win32. Так что это заставляет меня связываться только с NTDLL.dll.
Да, я знаю, что функции "недокументированы" и могут измениться в любое время (хотя я готов поспорить на сотню долларов, что wcstombs
по-прежнему будет делать то же самое точно через 20 лет, если он еще существует). Да, я знаю, что люди (особенно Microsoft) не любят, когда разработчики ссылаются на эту библиотеку, и что меня, вероятно, тут же подвергнут критике. И да, эти два пункта выше означают, что такие программы, как chkdsk и дефрагментаторы, которые запускаются до подсистемы Win32, вообще не должны создаваться, потому что буквально невозможно скомпоновать что-либо вроде kernel32. .dll или msvcrt.dll и по-прежнему иметь собственные исполняемые файлы NT, поэтому мы, разработчики, должны просто притворяться, что эти этапы должны навсегда остаться за пределами нашей досягаемости.
Но нет, я сомневаюсь, что кто-нибудь из присутствующих захочет, чтобы я вставил несколько тысяч строк кода и помог мне просмотреть их и попытаться выяснить, почему выделение памяти, которое не вызывает сбоев, отклоняется исходный код, который я изменяю. Вот почему я спросил о проблеме, отличной от «коренной» причины, хотя это предположительно считается лучшей практикой сообщества.
Если что-то по-прежнему не имеет смысла, не стесняйтесь оставлять комментарии ниже! :)
Редактировать 2:
Примерно через 8 часов отладки я наконец нашел проблему:
Оказывается, RtlReAllocateHeap()
не автоматически работает как RtlAllocateHeap()
, если переданный ему указатель равен NULL
.
realloc()
, тем более, что она занимает всего пару строк кода. Это трудный урок. - person Michael Burr   schedule 04.01.2011