Согласно стандарту, эти вещи никогда не нарушают строгое псевдонимы:
- Создание указателя.
- Выполнение арифметики указателя c.
- Запись в mallo c пробел.
То, что вам не разрешено делать в мальло c пробел, это чтение некоторой памяти другого типа, чем было написано как (кроме списка разрешенных типов псевдонимов, конечно).
Текст правила находится в C11 6.5 / 7:
Объект должен иметь свое сохраненное значение, доступное только [...]
и текст в 6.5 / 6 объясняет, что если мы находимся в малло c d, то запись записывает тип записи в место назначения (и, следовательно, не может быть несовпадения типов).
Код, который вы выложили до сих пор, никогда не делает запрещенных вещей, поэтому нет явных проблем Проблема возникнет только в том случае, если кто-то воспользуется вашим распределителем, а затем прочитает память, не записав его.
Сноска 1: 6.5 / 6, по-видимому, неисправна согласно ответу комитета на DR236 , но никогда не исправлялся, поэтому кто знает, где это нас оставляет.
Сноска 2: , как указывает Эри c, стандарт не относится к внутренним компонентам реализации, но учтите, что мой комментарии в контексте какого-то написанного пользователем распределителя, как и в другом вопросе, на который вы ссылались.