Должен ли указатель, переданный в free (), указывать на начало блока памяти, или он может указать на интерьер?

Вопрос в заголовке ... Я искал но ничего не нашел.


Редактировать:

Я действительно не вижу необходимости объяснять это, но люди думают, что то, что я говорю, не имеет смысла (и что я задаю неправильные вопросы ), вот в чем проблема:

Поскольку люди, похоже, очень заинтересованы в "корне" причина всей проблемы, а не сам вопрос (поскольку это, по-видимому, помогает решить проблему лучше, давайте посмотрим, помогает ли это), вот проблема:

Я пытаюсь создать библиотеку времени выполнения D на основе NTDLL.dll , так что я могу использовать эту библиотеку для подсистем, отличных от подсистемы Win32. Так что это вынуждает меня связываться только с NTDLL.dll.

Да, я знаю, что функции «недокументированы» и могут измениться в любое время (хотя я бы поставил сотню долларов, которые wcstombs будет делать то же самое точное через 20 лет, если оно все еще существует). Да, я знаю, что люди (особенно Microsoft) не любят, когда разработчики ссылаются на эту библиотеку, и что меня, вероятно, будут критиковать именно здесь. И да, эти два пункта означают, что программы, такие как chkdsk и дефрагментаторы, которые запускают до подсистемы Win32, даже не должны создаваться в первую очередь, потому что буквально невозможно связать с чем-либо вроде kernel32.dll или msvcrt .dll и по-прежнему имеют исполняемые файлы, родные для NT, поэтому мы, разработчики, должны просто притвориться, что эти этапы навсегда останутся вне досягаемости.

Но нет , я сомневаюсь, что кто-то здесь захочет, чтобы я вставьте несколько тысяч строк кода и помогите мне просмотреть их и попытаться выяснить, почему выделение памяти, которое не дает сбоев, отклоняется изменяемым мной исходным кодом. Вот почему я спросил о проблеме, отличной от "основной" причины, хотя это якобы известно сообществу как лучшая практика.

Если что-то по-прежнему не имеет смысла, не стесняйтесь оставлять комментарии ниже! :)


Редактировать 2:

Примерно через 8 часов отладки я наконец нашел проблему:

Оказывается, RtlReAllocateHeap () делает не автоматически работает как RtlAllocateHeap () , если указатель, присвоенный ему, равен NULL .

6
задан Baum mit Augen 8 July 2018 в 10:46
поделиться