Google Groepen ondersteunt geen nieuwe Usenet-berichten of -abonnementen meer. Historische content blijft zichtbaar.

Default Array Initialization Bug

18 weergaven
Naar het eerste ongelezen bericht

Marcus Kwok

ongelezen,
23 mrt 2006, 21:08:2223-03-2006
aan
I found a bug in VC++ .NET 2003 regarding default initialization of
arrays of primitives in a constructor initialization list, as detailed
in this post:
http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79

and in the reply by Dietmar Kuehl, in which he quotes the relevant
portion of the C++ Standard:
http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

I tried to file a bug report at
http://lab.msdn.microsoft.com/productfeedback/default.aspx
but they only let you submit bug reports for VC++ 2005, which I am
unable to install at the moment, and I am not sure if the bug is present
in the newer version.

Can anybody confirm if this bug is present in the newer version?

--
Marcus Kwok

Bruno van Dooren

ongelezen,
24 mrt 2006, 01:53:2424-03-2006
aan


This is the output when compiled with VC2005

During compilation:
warning C4351: new behavior: elements of array 'Init::ai' will be default
initialized
warning C4351: new behavior: elements of array 'Init::bi' will be default
initialized

When running

UnInit:
ai = {-858993460, -858993460, -858993460, -858993460, }
bi = {204, 204, 204, 204, }

Init:
ai = {0, 0, 0, 0, }
bi = {0, 0, 0, 0, }


--

Kind regards,
Bruno van Dooren
bruno_nos_pa...@hotmail.com
Remove only "_nos_pam"


Marcus Kwok

ongelezen,
24 mrt 2006, 13:24:0524-03-2006
aan
Bruno van Dooren <bruno_nos_pa...@hotmail.com> wrote:
>>I found a bug in VC++ .NET 2003 regarding default initialization of
>> arrays of primitives in a constructor initialization list, as detailed
>> in this post:
>> http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79
>>
>> and in the reply by Dietmar Kuehl, in which he quotes the relevant
>> portion of the C++ Standard:
>> http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57
>>
>> I tried to file a bug report at
>> http://lab.msdn.microsoft.com/productfeedback/default.aspx
>> but they only let you submit bug reports for VC++ 2005, which I am
>> unable to install at the moment, and I am not sure if the bug is present
>> in the newer version.
>>
>> Can anybody confirm if this bug is present in the newer version?
>
> This is the output when compiled with VC2005
>
> During compilation:
> warning C4351: new behavior: elements of array 'Init::ai' will be default
> initialized
> warning C4351: new behavior: elements of array 'Init::bi' will be default
> initialized
>
> When running
>
> UnInit:
> ai = {-858993460, -858993460, -858993460, -858993460, ^H^H}
> bi = {204, 204, 204, 204, ^H^H}
>
> Init:
> ai = {0, 0, 0, 0, ^H^H}
> bi = {0, 0, 0, 0, ^H^H}

I see, so they fixed it in the new version. Thanks for checking this
for me, and I will not file a bug report.

--
Marcus Kwok

Patrick Kowalzick

ongelezen,
30 mrt 2006, 01:46:2530-03-2006
aan
>I found a bug in VC++ .NET 2003 regarding default initialization of
> arrays of primitives in a constructor initialization list, as detailed
> in this post:
> http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79
>
> and in the reply by Dietmar Kuehl, in which he quotes the relevant
> portion of the C++ Standard:
> http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57

Funny enough the following change works as expected:

struct Init_POD
{
int ai[Size];
bool bi[Size];
};

class Init {
Init_POD pods;
public:
Init() : pods() { }
friend std::ostream& operator<<(std::ostream& o, const Init& i);
};

std::ostream&
operator<<(std::ostream& o, const Init& in)
{
o << "Init:\n";
o << "ai = {";
std::copy(in.pods.ai, in.pods.ai + Size, std::ostream_iterator<int>(o,
", "));
o << "\b\b}\n";

o << "bi = {";
std::copy(in.pods.bi, in.pods.bi + Size, std::ostream_iterator<bool>(o,
", "));
o << "\b\b}";

return o;
}

Regards,
Patrick


Marcus Kwok

ongelezen,
30 mrt 2006, 10:34:5630-03-2006
aan
Patrick Kowalzick <patrick....@mapandguide.de> wrote:
>>I found a bug in VC++ .NET 2003 regarding default initialization of
>> arrays of primitives in a constructor initialization list, as detailed
>> in this post:
>> http://groups.google.com/group/comp.lang.c++/msg/dab44a8b786b6a79
>>
>> and in the reply by Dietmar Kuehl, in which he quotes the relevant
>> portion of the C++ Standard:
>> http://groups.google.com/group/comp.lang.c++/msg/71a9fecc4f5d7d57
>
> Funny enough the following change works as expected:
>
> struct Init_POD
> {
> int ai[Size];
> bool bi[Size];
> };
>
> class Init {
> Init_POD pods;
> public:
> Init() : pods() { }
> friend std::ostream& operator<<(std::ostream& o, const Init& i);
> };

Hmm, that is interesting! Thanks.

--
Marcus Kwok

0 nieuwe berichten