vector question

B

Babis Haldas

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;
}
 
V

Victor Bazarov

Babis said:
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
 
B

Babis Haldas

Thanks

Victor Bazarov said:
Babis said:
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
 
U

utab

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,
 
M

Mark P

utab said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top