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