free и const
void free(void * ptr);

а не
void free(const void * ptr);

Статическая типизация проверила за вас.
Запретить возможность ручного каста возможным не представляется.
Понятно. Спасибо всем за ответы.