Solved

vector problem?

Posted on 2008-06-12
14
239 Views
Last Modified: 2010-04-01
I have a segment of code which is failing. It's is something implement many other times, but somehow in this instance is not working. the code segment is:

vector<SystemNode*>::iterator node_itr = gvp_SystemNodes.begin();
while(node_itr != gvp_SystemNodes.end());
{
  ~~~~~~~
}

when it gets to the while statment, it is stuck in a loop. The code does not crash, it just forever loops inside the std vector code. I have not figured out whats its doing. Since that was really weird I also tried this:

vector<SystemNode*>::iterator node_itr = gvp_SystemNodes.begin();
while(node_itr != gvp_SystemNodes.begin());
{
  ~~~~~~~
}

And the code went right into the while loop. When in debug mode and watching the vector, it seems to evaluate correctly.  What could be going on here?

Thanks,

0
Comment
Question by:mattososky
  • 6
  • 4
  • 4
14 Comments
 
LVL 53

Expert Comment

by:Infinity08
ID: 21774020
Are you actually incrementing the iterator ?

vector<SystemNode*>::iterator node_itr = gvp_SystemNodes.begin();
while(node_itr != gvp_SystemNodes.end());
{
  ~~~~~~~
  ++node_itr;
}
0
 
LVL 53

Expert Comment

by:Infinity08
ID: 21774029
Also, I assume that gvp_SystemNodes is defined as vector<SystemNode*> ?
0
 

Author Comment

by:mattososky
ID: 21774072
yes, <SystemNode*>...

Its not looping inside the while statement. It's looping inside 'gvp_SystemNodes.end()'. Never gets insode the while statement.
0
 
LVL 53

Expert Comment

by:Infinity08
ID: 21774089
>> It's looping inside 'gvp_SystemNodes.end()'.

What do you mean by that ? What's inside the loop block ? Can you show the exact code you are using ? If that's not possible, can you create a small demonstration code that shows the problem ?

What compiler are you using ?
0
 
LVL 40

Expert Comment

by:evilrix
ID: 21774130
>> It's looping inside 'gvp_SystemNodes.end()
Wow, that's a neat trick :)

There isn't really too much that can go wrong inside end() on VS2005 -- I agree with I8, we need code :)
0
 

Author Comment

by:mattososky
ID: 21774131
Ha! exactly my problem. I step through the code and it's inside the vector source code file, travles through about three functions until it returns the pointer. But then it executes the while statement again.

Have I hit a bug in the vector? Or something wrong with my compiler (VS2008)?

Again,, another very strange symptom,, listed in my intial post. If I set the while statment to !=~.begin(), it does enter the while statement when it clearly should not.

?
0
 
LVL 40

Accepted Solution

by:
evilrix earned 500 total points
ID: 21774148
You have semi-colons are the end of your while statement!

while(pred); <---- LOOK
{
}
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 53

Expert Comment

by:Infinity08
ID: 21774150
>> Have I hit a bug in the vector?

For something as basic as this, it sounds quite unlikely.

Can you try creating a new project, and putting the code in there - just to make sure it's not related to project corruption of some kind.

Do you have the same problem for any code that loops through a vector ?

Can you show some complete sample code that has the problem ?


Are you sure that the compiler has been installed correctly ?
0
 
LVL 53

Expert Comment

by:Infinity08
ID: 21774157
>> You have semi-colons are the end of your while statement!

Oh my ... Completely missed that lol
0
 

Author Comment

by:mattososky
ID: 21774160
There is another instance in the program where i declare a itr with a different name, but it works fine.
vector<SystemNode*>::iterator itr = gvp_SystemNodes.begin();
      while(itr!=gvp_SystemNodes.end())
      {


I would probably have to post alot of code for you to get the context....
0
 
LVL 40

Expert Comment

by:evilrix
ID: 21774171
>> You have semi-colons are the end of your while statement!
Does your code behave as per my example below? If so I'd suggest that's your problem.
#include <vector>
 

typedef std::vector<int> intvec_t;
 

int main()

{

	intvec_t intvec(10);

	intvec_t::const_iterator i = intvec.begin();
 

	while(i != intvec.end());

	{

	}

}

Open in new window

0
 

Author Comment

by:mattososky
ID: 21774174
I'm a bad boy....
0
 
LVL 40

Expert Comment

by:evilrix
ID: 21774182
>> I'm a bad boy....
Muhahahaha :)
0
 
LVL 53

Expert Comment

by:Infinity08
ID: 21774188
>> I'm a bad boy....

Yes you are ;) Confusing me like that lol. Glad evilrix was around to spot it, or I would have gone off on a wild goose chase heh.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now