Распределения округляются в большую сторону N байт, где N кратно 8 и зависит от используемой версии Windows.Предположим, что для этого случая выделения округляются до ближайших 8 байтов.
Pageheap работает, вставляя «защитную страницу» в конце каждого выделения и защищая ее от доступа на чтение / запись, поэтому любая попыткаиспользование этого приведет к нарушению доступа.
В этом случае ваше выделение test
запрашивает 12 байтов.Диспетчер кучи фактически выделяет вам 16 байтов.Доступ к test[15]
находится в пределах этого выделения, поэтому он не попадает на защитную страницу.
В одной дополнительной заметке я полагаю, что полная страница-куча заполнит «дополнительную» память, возвращаемую выделением, некоторым специальным значением.Когда вы освобождаете выделение, он проверит «лишнюю» память и выдаст исключение, если значение было изменено.