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

 C++ Discussion :

Pointeur au comportement hazardeux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Par défaut Pointeur au comportement hazardeux
    Bonsoir !
    Suite à mes aventures avec set_difference, je me heurte à un autre problème : Je remplis moi même une liste à partir des pointeurs d'une autre liste (je fais manuellement la différence)
    Mais, quand je parcoure cette liste et passe les pointeurs d'une fonction à l'autre, le déreferencement du pointeur dans la fonction appelée à un crash alors qu'une seconde plus tôt le même appel fonctionnait...
    Une idée de ce qui a pu causer ce phénomène pour le moins étrange ?
    Je commence à m'arracher les cheveux !
    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    void PerceivedScope::foo(EmissionSourceList& sourceList)
    {
            bool found = false;
            for(EmissionSourceList::iterator it = sourceList.begin(); it != sourceList.end(); ++it)
            {
    		for(EmissionSourceList::iterator up = mPerceivedSources.begin(); up != mPerceivedSources.end(); ++up)
    		{
    			if ((*up) == (*it))
    				found = true;
    		}
     
    		if (!found)
    		{
    			std::cerr << "Adding " << (*it) << " : " << (*it)->getEntity()->getIdentifier() << std::endl; 
                            /// On vérifie l'adresse du pointeur : 074FB488 : 2 (pas de crash)
    			addedSources.push_back((*it));
    		}
            }
    }
     
    /// Plus tard, a partir des entrées de la même liste que je viens de remplir
     
    void PerceivedScope::addPerceivedSource(EmissionSource* source)
    {
    	std::cerr << "Adding " << source << std::endl;  /// 074FB488, la MEME adresse
    	std::cerr << source->getEntity()->getIdentifier(); /// Crash
            notifyEntityAdded(source->getEntity());
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Avec le code posté on ne peut pas t'aider, le problème est ailleurs, surement dans le code entre les deux appels de fonction qui doit détruire quelque chose qu'il ne devrait pas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 11
    Par défaut
    Effectivement, ce bout de code seul ne peut pas à lui seul produire une erreur.
    Vu que le cas d'un dangling pointer était exclu (aucun delete n'a lieu à ce stade dans l'application), je comprenais vraiment pas ce qui pouvait causer un tel comportement.

    J'ai finalement trouvé ! En fait l'objet dérivé héritait de deux bases abstraites, dont EmissionSource, comportant des interfaces communes. Un simple changement d'ordre d'héritage a résolu le problème (en mettant EmissionSource en premier).

    Par contre je suppose qu'un cas similaire avec un pointeur sur l'autre interface X pourrait lui aussi produire ce genre d'erreur, maintenant qu'elle est initialisée en second ?

Discussions similaires

  1. problème pointeur comportement étrange
    Par all666 dans le forum Langage
    Réponses: 3
    Dernier message: 10/03/2015, 09h56
  2. Comportement bizarre avec un pointeur
    Par esteban dans le forum Langage
    Réponses: 7
    Dernier message: 15/07/2010, 14h05
  3. Réponses: 21
    Dernier message: 06/08/2009, 09h31
  4. Registres se comportant comme des pointeurs
    Par J4e8a16n dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 01/04/2009, 12h04
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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