Я не понимаю, почему работает следующий код C (печатает «53»). Я думал, что int a будет помещен в стек и вытер, как только foo() выйдет. Если компилятор вместо этого размещает int a на куче, есть ли способ сказать это не так?Является ли компилятор помещением памяти в кучу?
#include "stdio.h"
int * foo()
{
int a = 53;
int * b = &a;
return b;
}
int main(void)
{
int * c = foo();
printf("%d\n",*c);
return 0;
}
Это именно то, что происходит. Эта программа имеет неопределенное поведение. – Jon
Вам просто повезло?!. 'a' aka' b' был в стеке - теперь вы живете в мире неопределенного поведения. –
Вам нужно вызвать другую функцию. У вашего указателя стека нет причин переписывать его чем-либо еще. – jiveturkey