Это неопределенное поведение , как в, вы можете это сделать, но результаты не определены, как в непредсказуемом, так как в программе может возникнуть ошибка sh.
В этом случае вы может писать только в выделенный регион, или sizeof(int) * 5
.
Почему C не мешает вам сделать это? Это потому, что философия языкового дизайна заключается в том, что программист знает, что делает, и не мешает ему.