偶然碰到一个问题,关于数组元素默认初始化~~~
在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)
随笔——数组的初始化
最新推荐文章于 2024-08-28 19:43:31 发布