C语言关于局部变量的有关问题

C语言关于局部变量的问题
C/C++ code

#include<stdio.h>

int * f()
{
    int i = 5;
    
    int * p = &i;

    return p;
}

int main(void)
{
    int * q = f();
    
    printf("%d\n",*q);

    return 0;
}



局部变量是在栈中分配并自动释放的,上面程序,f函数有两个局部变量i 和 p ,p记录了i的地址,并返回了,主函数中q接收了p的值同时也指向了i;但是我觉得既然此时f函数已经调用完毕,i的空间应该自动回收,q记录的只是一个未知的空间地址,*q并不能准确输出原来i的值,但是在vc6中却输出了i的正确值,不理解啊..

哪位帮帮忙,谢谢了

------解决方案--------------------
因为存储那个i变量的栈空间虽已被回收,但里面存储的值却还没有被更改。但这样的情况是不可依赖的,因为谁也不知道什么时候它会被改变。
------解决方案--------------------
不要返回临时变量的地址, 空间被回收, 但是还未再被利用, 此时,其值可能还是原来的值,但是再使用它,是不理智的。
操作系统只能对你会说:嘿,你踩了*了。


------解决方案--------------------
楼主自己运行一下试试吧,,也不多说什么,
C/C++ code

#include <stdio.h>

int * f()
{
    int i = 5;
    
    int * p = &i;

    return p;
}

int main(void)
{
    int * q = f();
    printf("%d\n",*q);
    printf("%d", *q);

    return 0;
}