Вы просите место для двух целых чисел. p [3] предполагает, что у вас есть место для 4 целых чисел!
===================
Вы должны указать malloc, сколько вам нужно, потому что он не может угадать сколько памяти вам нужно.
malloc может делать все, что захочет, при условии, что он возвращает как минимум объем памяти, который вы запрашиваете.
Это все равно, что попросить место в ресторане. Вам может быть предоставлен более большой стол, чем вам нужно. Или вам может быть предоставлено место за столом с другими людьми. Или вам может быть предоставлен стол на одно место. Маллок может делать все, что захочет, пока вы получаете единственное место.
Как часть "контракта" на использование malloc, вы обязаны никогда не ссылаться на память сверх того, что вы просили, потому что вы гарантированно получите только запрошенную сумму.