Возможный дубликат:
Можно ли получить доступ к памяти локальной переменной за пределами ее области?
вход:
#include <stdlib.h>
#include <stdio.h>
int func2(void);
int* func1(void);
int func2(void)
{
int* b;
b = func1();
printf("%d", *b);
printf("%d", *b);
printf("%d", *b);
}
int* func1()
{
int a = 13;
return &a;
}
int main()
{
func2();
}
Выход:
13 -1077824828 -1077824828
Может кто-нибудь объяснить, что произошло в стеке и ОС? Почему после получения значения указателя результат изменился с 13 на мусор?
func2
ничего не делаетreturn
, хотя и определено с типом возвращаемого значенияint
. - person Daniel Fischer   schedule 14.09.2012printf()
перезаписывает13
, оставшийся в стеке после вызоваfunc1()
. - person Mysticial   schedule 14.09.2012