tlanyan
tlanyan

Reputation: 3

Values from vector differ from the original value

I am confused with C++ vector and ask for help. I declare a class CBoundaryPoint:

class CBoundaryPoint:
{
public:
    double m_param;
    int m_index;    
}

And then I define a vector:

vector<CBoundaryPoint> vBoundPoints;
CBoundaryPoint bp;
double param;
// other codes
bp.m_param = param;
vBoundPoints.push_back( bp );

It surprises me that for every element in vBoundPoints, the value of m_param is totally different from the given value param. I just don't know why.

For Example:

param = 0.3356;
bp.m_param = param; // so bp.param equals to 0.3356;
vBoundPoints.push_back( bp ); // while (*(vBoundPoints.end()-1)).m_param = -6.22774385622041925e+066;  same case to other elements

So what happened and why? I'm using VS2010.

Upvotes: 0

Views: 93

Answers (1)

juanchopanza
juanchopanza

Reputation: 227390

You probably get garbage when you resize the vector or create a vector of a certain size using the size_type constructor. You get default-constructed objects in your vector, and these contain primmitive types. Since you have no user defined default constructor, the values are essentially random, or "garbage".

You can fix this by adding a default constructor to your class:

class CBoundaryPoint:
{
public:
    CBoundaryPoint : m_param(), m_index() {} // initializes members to 0. and 0
    double m_param;
    int m_index;    
}

Upvotes: 1

Related Questions