1. 核心原理:栈内存的生命周期与销毁机制要理解为什么局部变量会悬空,必须深入理解 C++ 的内存布局,特别是栈 (Stack)的工作方式。1.1 栈帧 (Stack Frame) 的创建与销毁当函数被调用时,CPU 会在栈上为该函数分配一块连续的内存区域,称为栈帧。分配:通过移动栈顶指针(如 x86 架构下的ESP/RSP寄存器)来“分配”空间。这仅仅是指针的移动,速度极快,不涉及内存清零或复杂的系统调用。局部变量存储:函数内的非static局部变量就存储在这个栈帧中。销毁:当函数执行return或到达末尾时,栈顶指针移回原来的位置。注意:此时内存中的数据并没有被立即清除(置零),只是该内存区域被标记为“空闲”,可供下一次函数调用复用。1.2 悬空的本质当你返回局部变量的地址时:你返回了一个有效的内存地址(例如0x7ffee4b0)。函数返回,栈帧弹出,该地址在法律上(C++ 标准层面)不再属于任何有效对象。物理上,该地址上的比特位(bits)可能还保留