Если вы случайно напишете за пределами блока, выделенного с помощью alloca
(например, из-за переполнения буфера), вы перезапишите адрес возврата вашей функции, потому что он находится выше "в стеке, т. е. после вашего выделенного блока.
Следствием этого является двоякое:
Напротив, если вы пишете за пределами блок на куче, который вы «просто» получаете от кучи. Программа, вероятно, прекратится неожиданно, но будет правильно раскручивать стек, тем самым уменьшая вероятность выполнения вредоносного кода.