wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 4

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» modification d'un std::vector fait planter l'application
Conversation (Résolue) : modification d'un std::vector fait planter l'application
14-07-2009 13:46:41  modification d'un std::vector fait planter l'application #1
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

je viens de rajouter une fonction qui va modifier un vector a mon code. Et mon application plante!

voici ma fonction :

Code Cpp:

void TAPframe::ReplaceCoord(TreeCoord coord,int treeId)
{
    switch(treeId)
    {
        case ID_TREECTRL1:
            if(!m_list.empty())
            {
                TreeCoord a;
                int i = 0;
                for(std::vector<TreeCoord>::iterator it =  m_list.begin(); it != m_list.end();)
                {
                    if (m_list[i].x == coord.x)
                    {
                        m_list.erase(it);
                        m_list.push_back(coord);
                        return;
                    } 
                    i++;
                }
            }
            m_list.push_back(coord);
            break;
        case ID_TREECTRL2:
            if(!m_list2.empty())
            {
                int i = 0;
                for(std::vector<TreeCoord>::iterator it =  m_list2.begin(); it != m_list2.end();)
                {
                    if (m_list2[i].x == coord.x)
                    {
                        m_list.erase(it);
                        m_list2.push_back(coord);
                        return;
                    } 
                    i++;
                }
            }
            m_list2.push_back(coord);
            break;
    }
    return;
}



-TreeCoord est une structure tout ce qu'il ya de plus simple

-m_list et m_list2 sont des std::vector<TreeCoord>



QQ comprend ce que je fais de mal?

Dernière modification par maspero (14-07-2009 13:49:05)

14-07-2009 16:45:06  Re: modification d'un std::vector fait planter l'application #2
fabrizio (Membre)
Lieu: france
Inscrit le : 06-04-2008
Messages: 28
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
dans ton         case ID_TREECTRL2:
tu as m_list.erase(it);
                        m_list2.push_back(coord);

ce devrait pas etre  m_list2.erase(it); à la place m_list ?
----------
note: pourquoi tu duplique le code tu fais même traitement dans les 2 cas ? récupère une référence sur le vector qui va bien en fonction de ton treeid.
----------
note 2: pourquoi tu utilise un compteur i alors que tu as un iterateur sur ton element ?

Dernière modification par fabrizio (14-07-2009 16:52:57)


Vouloir être de son temps, c'est déjà être dépassé.
14-07-2009 19:02:52  Re: modification d'un std::vector fait planter l'application #3
4ian (Membre)
Inscrit le : 06-11-2007
Messages: 48
Snippets: 0
Tutoriels: 0
Site web
Hors ligne
Un coup de debugger devrait permettre de localiser immédiatement d'où vient le problème :)

4ian

wwwcompilgames.net
15-07-2009 09:46:55  Re: modification d'un std::vector fait planter l'application #4
maspero (Membre)
Inscrit le : 19-05-2009
Messages: 81
Snippets: 0
Tutoriels: 0
Hors ligne
ok je corrige merci pour les remarques, en fait le probleme c'est que le programme ne plante pas dans cette fonction, il plante un peu apres l'appel de cette fonction, et le debugger me renvoi vers std::vector, donc j'en déduis que le probleme vient de la.


---------------------------------------

Apres qq temps de cassage de tete sur cette fonction je décide que je peux contourner le probleme donc le sujet est clos merci d'avoir aidé.

Dernière modification par maspero (15-07-2009 12:52:31)

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» modification d'un std::vector fait planter l'application