一个函数传参和局部变量作用域有关问题

一个函数传参和局部变量作用域问题
如:
void fun1(int **p)
{
  int a = 10;
  *p = &a;
}

int main()
{
  int *p = NULL;
  fun1(&p);
  printf("%i",*p);
}

能正确输出10,但是请问这样写安全吗?局部变量a不是在函数fun1结束的时候自动释放吗?
最近写c/c++的些许困惑,请高人解答。

------解决方案--------------------
这样的写法当然是不安全的,建议这样写:
C/C++ code

#include <stdio.h>

void fun1(int *p)
{
    *p = 10;
}

int main()
{
    int p;
    fun1(&p);
    printf("%d\n", p);

    return 0;
}

------解决方案--------------------
探讨

引用:

这样的写法当然是不安全的,建议这样写:



那请问那成功输出10是偶然的吗?还是内存还没来得及释放的原因?