简体   繁体   中英

C++ initializing the dynamic array elements

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

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

{                                                                               
 cout << *k <<  endl;                                         

}         

Even though I have value initialized the dynamic array elements by using the () operator, the output I get is

135368
0
0
0
0

Not sure why the first array element is initialized to 135368.

Any thoughts ?

My first thought is: " NO ...just say NO !"

Do you have some really, truly, unbelievably good reason not to use vector?

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

Edit: Of course, if you want it initialized to zeros, that'll happen by default...

Edit2: As mentioned, what you're asking for is value initialization -- but value initialization was added in C++ 2003, and probably doesn't work quite right with some compilers, especially older ones.

I agree with litb's comment. It would appear to be a compiler bug.

Putting your code in a main function and prefixing with:

#include <iostream>
#include <ostream>
using std::cout;
using std::endl;
using std::size_t;

I got five zeros with both gcc 4.1.2 and a gcc 4.4.0 on a linux variant.

Edit:

Just because it's slightly unusual with array type: In a new expression an initializer of () means that the dynamically allocated object(s) are value initialized . This is perfectly legal even with array new[...] expressions. It's not valid to have anything other than a pair of empty parentheses as an initializer for an array new expression, although non-empty initializers are common for for non-array new epxressions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM