При выполнении такого рода действий нужно быть осторожным, так как запись выделения, используемая free для определения того, какую память освобождать, создается malloc и связывается с адресом, возвращаемым malloc.
Это означает, что вы можете вызывать free для любого указателя, указывающего на первый байт блока malloc, и он освобождает правильный блок памяти, но если вы вызываете free для любого адреса в блоке, кроме первый байт, в лучшем случае вы будете SIGSEV или SIGBUS, а в худшем случае испортите таблицы распределения, что приведет к странному и необъяснимому поведению.
Так что, если у вас есть блоки, выделенные таким образом, как у mystruct, будьте осторожны, чтобы не смешивать их с однозначно распределенными mystructs, иначе вы столкнетесь с неприятным выбором между утечкой памяти и ее повреждением.