C ++初始化动态数组元素

时间:2009-10-16 17:57:38

标签: c++

const size_t size = 5;
int *i = new int[size]();

for (int* k = i; k != i + size; ++k)                                            

{                                                                               
 cout << *k <<  endl;                                         

}         

即使我使用()运算符初始化动态数组元素的值,我得到的输出是

135368
0
0
0
0

不确定为什么第一个数组元素被初始化为135368。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

我的第一个想法是:“ ......只说!”

你是否有一些真正,真实,令人难以置信的好理由不使用矢量?

 std::vector<int> i(5, 0);

编辑:当然,如果你想将它初始化为零,默认情况下会发生这种情况......

Edit2:如前所述,你要求的是值初始化 - 但是在C ++ 2003中添加了值初始化,并且对于某些编译器(尤其是旧编译器)可能无法正常工作。

答案 1 :(得分:3)

我同意litb的评论。它似乎是一个编译器错误。

将您的代码放在main函数中,并以:

作为前缀
#include <iostream>
#include <ostream>
using std::cout;
using std::endl;
using std::size_t;

我在linux变体上使用gcc 4.1.2和gcc 4.4.0得到了五个零。

修改

仅因为数组类型略有异常:在新表达式中,初始化程序()表示动态分配的对象值已初始化。即使使用数组new[...]表达式,这也是完全合法的。除了一对空括号作为数组new表达式的初始值设定项之外,其他任何内容都无效,尽管非空初始值设定项对于非数组new epxressions是常见的。