Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
704 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème avec la classe vector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec la classe vector

n°870003
madprog
Posté le 11-10-2004 à 13:21:29  profilanswer
 

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

mood
Publicité
Posté le 11-10-2004 à 13:21:29  profilanswer
 

n°870026
Lam's
Profil: bas.
Posté le 11-10-2004 à 13:55:35  profilanswer
 

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 :
  1. while(it!=Client.end())
  2. {
  3.      if(id->sock->eof())
  4.       {
  5.         delete id->sock;
  6.         id = Clients.erase(id);
  7.       }
  8.       else
  9.       {
  10.         parsemsg(*id->sock);
  11.         ++id;
  12.       }
  13. }

n°870032
madprog
Posté le 11-10-2004 à 13:57:55  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème avec la classe vector

 

Sujets relatifs
probleme d'un débutant avec la focntion mail()[MYSQL]probleme requete imbriquée
probleme avec un if[RESOLU][C] problème de boucle
problème dans un progprobleme javascript et firmulaire
url rewriting probleme !Problème de jointures multiples
Problème avec une requête SQL comprenant "in"Problème de declaration de sous-class
Plus de sujets relatifs à : Problème avec la classe vector


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR