Это Неопределенное поведение для доступа к памяти, которой не владеет ваша программа.
Пространство памяти, занимаемое y
внутри функции, не принадлежит вашей программе после ее завершения, и, тем не менее, вы получаете к ней доступ.
Может случиться что угодно.
Худшее, что может произойти, - это чтобы программа вела себя так, как вы ожидаете.
Когда это происходит, вы считаете, что делать то, что вы сделали, можно. ЭТО НЕ ОК . Неопределенное поведение - это плохо.
Также не гарантируется, что одно и то же неопределенное поведение происходит и при разных запусках программы. Некоторое время он может работать так, как вы ожидаете, и вылетать, когда вы демонстрируете его клиенту (или своему боссу).
(Некоторые хорошие проявления UB - это сбой, или лимонный сок начинает вытекать из порта USB)
Может случиться что угодно.