Не то чтобы это было совершенно ценно, но поскольку никто больше не поднял его (все вышеприведенные ответы верны, кстати, и излишни, я согласен, что люди должны голосовать за правильный ответ, а не повторять одно и то же более).
В вашем примере, x является переменной стека. malloc дает вам кучу памяти. Это, вероятно, не то, о чем вам нужно думать слишком много в сегодняшнем программировании, но если вы когда-нибудь будете работать в среде, где объем памяти выше, вы захотите максимально сэкономить свой стек.
Стоит также отметить, что по какой-то причине вы выделяете 3 * sizeof (int). Даже если вы МОЖЕТЕ выделить память для стека, в вашем примере, поскольку вы пытаетесь получить только 1 int, вам потребуется только 1 * sizeof (int), остальное будет потрачено впустую.