Problème avec la classe vector - C++ - Programmation
Marsh Posté le 11-10-2004 à 13:55:35
Si, il met à jour begin() et end(), mais pas ton itérateur.
Il te faux donc récupérer la valeur de retour de erase(), qui est la nouvelle position de ton itérateur.
Classiquement:
Code :
|
Marsh Posté le 11-10-2004 à 13:57:55
ah ok, tout simplement
le truc c'est que j'ai pas de doc et encore moins en amphi, vu que j'ai pas de net non plus
merci encore !
mad:: prog
Marsh Posté le 11-10-2004 à 13:21:29
salut les gens
j'ai un code du genre :
vector <client> Clients;
int main()
{
std::vector<client>::iterator id;
while(1)
{
for(id = Clients.begin(); id != Clients.end(); ++ id)
{
if(id->sock->eof())
{
delete id->sock;
Clients.erase(id);
continue;
}
parsemsg(*id->sock);
}
}
}
client est une structure à moi, avec dedans une classe clSocket de ma composition qui gère la connexion.
parsemsg est une fonction qui va chercher les paquets, tout ca.
Le problème est que le programme segv dès que le client déco, dans clSocket::eof()
c'est comme si le vecteur avait effectivement supprimé la structure correspondante, mais sans mettre à jour begin() et end(); il continue à regarder si le socket qu'on a déjà fermé contient des données...
Enfin je m'arrête là, j'ai l'impression d'embrouiller les choses plus que d'expliquer...
Système : Linux hermes 2.6.8.1 #4 Mon Oct 4 09:51:32 CEST 2004 i686 Celeron (Coppermine) GenuineIntel GNU/Linux
Compilateur : gcc version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)
(infos au cas ou, je pense que ca vient plutot de mon code)
merci d'avance pour toute aide
mad:: prog