IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Probleme avec erase(iter)


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut Probleme avec erase(iter)
    Salu tt le monde

    j'ai un probleme avec cette methode :
    [balise ajouté par mongaulois]
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void Labyrinthe::leCombat(Chambre *chr)
    {
    	multimap<occupant,Occupant*>::iterator iter;
    	iter=chr->getPerso()->begin();
    	while (iter!=chr->getPerso()->end())
    	{
    		if(iter->first!=hero)
    		{
    		  	if(hiro->combattre(iter->second,iter->first))
    				//delete iter->second;
    				chr->getPerso()->erase(iter);
    		}
    		iter++;
    	}
     
    }

    ca compile parfaitement mais je reçois une erreur d'execution liée a erase lorsque je change erase par delete ca marche parfaitement le 1er coup et au 2eme passage ca coince on dirait que l'iterateur passe par l'objet supprimé.

    PS : la methode combattre retourne une valeur booleenne

  2. #2
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut
    aparament erase marche et le probleme lorsque je fais iter++ il trouve pas iter et genere probleme d'execution

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Quand on fait erase sur un itérateur, il devient invalide. La solution : Incrémenter avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    multimap<occupant,Occupant*>::iterator elemAEffacer = iter;
    iter++;
    chr->getPerso()->erase(elemAEffacer);
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    bonjour,
    1-

    2-Parfois erase de map/multimap ...(suivant l'implementation) retourne un pointeur valide,il faut donc utiliser celui la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(iter->first!=hero && hiro->combattre(iter->second,iter->first))
                   {
    				delete iter->second;//obligatoire
    				iter =chr->getPerso()->erase(iter);
    		}
    else
    {
    		iter++;
    }
    Pour ce que t'as dit JolyLoic,se sera faux pour un vector. Tu zappera des éléments.
    http://cpp.developpez.com/faq/cpp/?p...ssion_elements

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut
    merci pour votre aide,

    le probleme a bien ete resolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec Logic:iterate
    Par ForHuman dans le forum Struts 1
    Réponses: 7
    Dernier message: 17/07/2008, 16h05
  2. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39
  3. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  4. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo