Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   vector question (http://www.velocityreviews.com/forums/t454807-vector-question.html)

Babis Haldas 06-19-2006 04:30 PM

vector question
 
Can you please tell me whats wrong with the follow code
Its crasing in the line
cout << v[0]->x1 << endl;
when accesing the first element of the vector
If i define the vector as
vector<foo*>v ;
everything is ok

why it doesnt like v(10) ?

thanks

#include <iostream>
#include <vector>

using namespace std;

struct foo {
int x1;
int x2;
};

int main()
{
vector<foo*> v(10);
foo * p;
p = new foo;
p->x1 = 111;
p->x2 = 222;
v.push_back(p);

cout << v[0]->x1 << endl;
}



Victor Bazarov 06-19-2006 04:34 PM

Re: vector question
 
Babis Haldas wrote:
> Can you please tell me whats wrong with the follow code
> Its crasing in the line
> cout << v[0]->x1 << endl;
> when accesing the first element of the vector
> If i define the vector as
> vector<foo*>v ;
> everything is ok
>
> why it doesnt like v(10) ?


Because if you don't specify the size, it creates an *empty* vector,
in which you later insert the *real* (non-null) element, which you
later access.

>
> thanks
>
> #include <iostream>
> #include <vector>
>
> using namespace std;
>
> struct foo {
> int x1;
> int x2;
> };
>
> int main()
> {
> vector<foo*> v(10);


That creates a ten-sized vector of pointers to 'foo', each null (IIRC).

> foo * p;
> p = new foo;
> p->x1 = 111;
> p->x2 = 222;
> v.push_back(p);


That inserts *yet another* pointer to 'foo' at the end of the vector.

>
> cout << v[0]->x1 << endl;


v[0] is a null pointer. You try dereferencing it. Undefined behaviour.

> }


V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask



Babis Haldas 06-19-2006 04:41 PM

Re: vector question
 
Thanks

"Victor Bazarov" <v.Abazarov@comAcast.net> wrote in message
news:e76jmo$lgd$1@news.datemas.de...
> Babis Haldas wrote:
>> Can you please tell me whats wrong with the follow code
>> Its crasing in the line
>> cout << v[0]->x1 << endl;
>> when accesing the first element of the vector
>> If i define the vector as
>> vector<foo*>v ;
>> everything is ok
>>
>> why it doesnt like v(10) ?

>
> Because if you don't specify the size, it creates an *empty* vector,
> in which you later insert the *real* (non-null) element, which you
> later access.
>
>>
>> thanks
>>
>> #include <iostream>
>> #include <vector>
>>
>> using namespace std;
>>
>> struct foo {
>> int x1;
>> int x2;
>> };
>>
>> int main()
>> {
>> vector<foo*> v(10);

>
> That creates a ten-sized vector of pointers to 'foo', each null (IIRC).
>
>> foo * p;
>> p = new foo;
>> p->x1 = 111;
>> p->x2 = 222;
>> v.push_back(p);

>
> That inserts *yet another* pointer to 'foo' at the end of the vector.
>
>>
>> cout << v[0]->x1 << endl;

>
> v[0] is a null pointer. You try dereferencing it. Undefined behaviour.
>
>> }

>
> V
> --
> Please remove capital 'A's when replying by e-mail
> I do not respond to top-posted replies, please don't ask
>




utab 06-19-2006 10:40 PM

Re: vector question
 

> > #include <iostream>
> > #include <vector>
> >
> > using namespace std;
> >
> > struct foo {
> > int x1;
> > int x2;
> > };
> >
> > int main()
> > {
> > vector<foo*> v(10);

>
> That creates a ten-sized vector of pointers to 'foo', each null (IIRC).


Why are these pointers are all NULL. Is that because of the ctors of
the vector class value-initializes them. If that is, is not value
initializating to 0(NULL for pointers) wrong because it is not a
built-in type?

Or I am mistaken at some point?

Regards,


Mark P 06-19-2006 11:48 PM

Re: vector question
 
utab wrote:
>>> #include <iostream>
>>> #include <vector>
>>>
>>> using namespace std;
>>>
>>> struct foo {
>>> int x1;
>>> int x2;
>>> };
>>>
>>> int main()
>>> {
>>> vector<foo*> v(10);

>> That creates a ten-sized vector of pointers to 'foo', each null (IIRC).

>
> Why are these pointers are all NULL. Is that because of the ctors of
> the vector class value-initializes them. If that is, is not value
> initializating to 0(NULL for pointers) wrong because it is not a
> built-in type?
>


The vector ctor will default initialize them. For pointers, default
initialization means that they are set to zero. (This should not be
confused with other situations where uninitialized variables are given
garbage values. Default initialized is not the same as uninitialized.)

Mark


All times are GMT. The time now is 03:51 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.