C 悬空指针● 调用fun结束,栈帧销毁,只是标记这块内存可以被复用,不会立刻清零 ● 第一次printf(“%d\n”, *p);:此时栈内存还没被别的指令覆盖,数据10还留在原地,所以碰巧打印 10 ● 执行完第一个printf,printf函数调用会复用这块栈空间,把栈内存覆盖 ● 第二个printf(“%d\n”, *p);:原来存放 10 的内存已经被改写,读出随机垃圾值 -858993460 重点:不是一定会先对后错! 未定义行为,不同编译器、不同编译选项、不同系统,结果完全不一样,有可能两次都是 10,