随笔——数组的初始化

偶然碰到一个问题,关于数组元素默认初始化~~~
  在primer上看到的是:
  ->在函数体外定义的内置数组,其元素均初始化为0;
  ->在函数体内定义的内置数组,其元素无初始化。
  ->不管数组在哪定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组提供显示的初始化。

  测试了一个程序,在main()中定义一个int darrar[10];结果发现其初始值为0XCCCCCCCC(DBUG)模式下,然后将这个数组定义移到了全局中,其初始值变为了0;

  然后在Release模式下,运行时,发现在main()中定义的数组初始值竟然不再是0XCCCCCCCC,很是奇怪???后来才明白,定义的数组分配的内存在栈中,在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。这就是在Debug模式下调试的好处之一。如果在Release模式下,系统就不会用0xCCCCCCCC来处理一下了。

  C++对象模型一书中提到,Global objects会在程序启动时被清零;而Local objects有可能会使用上一次遗留的值......

  注: VC的DEBUG版会把未初始化的指针自动初始化为0xCCCCCCCC,而不是就让它随机去,那是因为DEBUG版的目的是为了方便我们调试程序的,如果野指针的初值不确定,那么每次调试同一个程序就可能出现不一样的结果,比如这次程序崩掉,下次正常运行,再一次虽然没崩掉,但结果不对……那显然对我们解bug是非常不利的。
DEBUG版本为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xcc,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCC。(此段引用自http://hi.baidu.com/guangbinw/blog/item/e88d5345e04119398694733a.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值