В C и С++ free(my_pointer) падает, когда он вызывается дважды.
Почему? Будут храниться все malloc вместе с размером. Когда вызывается первый free, он идентифицирует, что это было присвоено каким размером, поэтому нам не нужно передавать размер вместе со свободным вызовом.
Так как он знает все, почему он не проверяет второй раз и ничего не делает?
Либо я не понимаю, что поведение malloc/free или free не реализовано безопасно.