前言:
编码时经常会遇到 IDE 对于 “变量未初始化” 的警告,我们不应当忽略此警告,有些时候未初始化的局部变量可能包含了非法值。
为什么局部变量要初始化?
局部变量的分配和释放:局部变量存在于栈内存区,一个进程有一个全局栈,如果比较熟悉汇编就知道栈空间的分配是通过移动栈顶指针来实现的。
进入某个函数时,栈顶指针会向低地址移动,移动出来的空间就是当前函数私有的栈帧空间,这部分空间就是用来存储局部变量的,当函数返回时,栈顶指针会掉过头来移动,而移动距离也就是函数的栈帧空间,这也就是局部变量的释放过程。
也就是说,从栈上分配和释放空间的过程就是局部变量创建和销毁的过程。
可见这个过程并没有做任何初始化动作,因此如果下一次函数调用还是使用刚才的栈,那么很有可能导致局部变量内的空间中有上次残留的数据,进而造成错误值。