C++ 未被初始化的局部变量

说法 1: 

局部变量是在程序运行时由栈分配,对于没有初始化的局部变量,VC的DEBUG版会把未初始化的变量value,初始化为sizeof(value)个0xCC。所以我们会看到未初始化的整型的值始终是-858993460,而不是任意值。有意思的是汉字“烫”的编码恰好就是1100110011001100,所以要是我们输出一段字符串的值是一长串“烫”时,那么就要注意是否是字符串没有被初始化引起的!

 

说法 2: 

CPU不认识变量,更无法识别变量的名字,CPU只会从特定的内存位置取值或者将值存到特定的内存位置,因此当问一个变量的值是多少的时候,必须要知道这个变量对应的值被保存在什么地方。

a的值取决于调入内存该位置的页面对应偏移的初始值,这取决于操作系统:
  • 操作系统在分配给程序页面时可能会将页面clear为零页。

打印结果,a的值为0,我们认为操作系统返回给了应用程序零页。

结论:函数返回在pop出当前栈帧的时候,并不会清理它遗留在栈帧里的数据,下个函数调用再次重用到该栈帧的内存时,未初始化的局部变量将会被遗留数据影响,从而变得不确定!

posted @ 2021-12-15 15:28  Clovran-Wong  阅读(1025)  评论(0编辑  收藏  举报