Please consider the following scenario:
map(T,S*) & GetMap(); //Forward decleration
map(T, S*) T2pS = GetMap();
for(map(T, S*)::iterator it = T2pS.begin(); it != T2pS.end(); ++it)
{
if(it->second != NULL)
{
delete it->second;
it->second = NULL;
}
T2pS.erase(it);
//In VS2005, after the erase, we will crash on the ++it of the for loop.
//In UNIX, Linux, this doesn't crash.
}//for
It seems to me that in VS2005, after the "erase", the iterator will be equal to end(), hence the crash while trying to increment it.
Are there really differences between compilers in the behavior presented here?
If so, what will the iterator after the "erase" equal to in UNIX/Linux?
Thanks...
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…