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

说法 1: 

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

 

说法 2: 

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

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

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

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

原文链接: https://www.cnblogs.com/wiesslibrary/p/15692961.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/215844

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午2:57
下一篇 2023年2月13日 上午2:58

相关推荐