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 :

Programme qui bloque avec fonction sort


Sujet :

SL & STL C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut Programme qui bloque avec fonction sort
    Salut tout le monde,
    Je suis entrain de faire un petit programme dans lequel je dois trier un vecteur.
    Pour cela j'utilise la fonction sort de la STL mais il semble que mon programme plante(quand je dis plante il tourne dans le vide) lorsque je l'execute.
    J'ai bien regardé les tutos fournis sur le site mais je ne trouve pas mon erreur donc je vous l'expose.

    Voici mon fichier.h
    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
    class ContactListSortByHostAddrVisitor: public ContactListSortVisitor{
     
              public:
                       ContactListSortByHostAddrVisitor(){};
                       virtual ~ContactListSortByHostAddrVisitor(){}
               void visit(User& u)const;
              private:
                       struct compare
               {
                    inline bool operator()(const Contact& c1, const Contact& c2)const
                                { 
                         cout << "ca passe ici" << endl;
                         return c1.getHostAddr()<c2.getHostAddr();
                                }
                           };
     
    };
    Et le .cpp correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ContactListSortByHostAddrVisitor::visit(User& u)const
    {
         sort(u.getContactList().begin(),u.getContactList().end(),ContactListSortByHostAddrVisitor::compare());
    }
    Pouvez vous me dire pourquoi le programme se bloque lors de l'appel a la fontion sort? merci d'avance.

    PS: Le message "Ca passe ici" mis dans la fonction de comparaison ne s'affiche pas non plus

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    par tourne dans le vide, tu veut dire ne se passe rien ou il y as "ca passe ici" en bouclle qui s'affiche?

    est tu sur que c1.getHostAddr()<c2.getHostAddr soit correcte?

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Quand je dis tourne dans le vide ca veut dire qu'il ne se passe rien. Le programme reste bloqué.

    Et mes fonctions getHostAddr() correpondent simplement a des return host_addr qui est de type string

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    tu coppile sous quoi??
    sinon tu doit avoir un prob avec User..
    Tu fait peut etre une erreur mémoire avant...
    ca va etre dur de t'aider sans plus de code..
    Sinon

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    a quoi ressemble la fonction ??
    getContactList()

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Voici le code de la fonction getContactList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<Contact> User::getContactList(){return this->contact_list;}

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    alors la hein , non je dec.
    En fait ta fonction te renvoie une copie de vector... Donc dans ton sort begin et end sont des iterateur sur deux vector different. Donc ca marche pas
    remplace par ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vector<Contact> & User::getContactList(){return this->contact_list;}
    const vector<Contact> & User::getContactList() const {return this->contact_list;}
    a lalala

    si il ne se passe rien c'est par ce qu'il est planté
    [edit]
    a cause d'un accés mémoire indefinie

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    mdr . J'avais completement oublié ce détail lol. Bon bah j'ai perdu beaucoup de temps pour une broutille.
    Je te remercie.
    Bonne fin de soirée.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par ultimate_manx Voir le message
    mdr . J'avais completement oublié ce détail lol. Bon bah j'ai perdu beaucoup de temps pour une broutille.
    Je te remercie.
    Bonne fin de soirée.
    de rien. toi aussi

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    au faite
    tu devrait rajouter ca aussi
    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
    class Contact
    {
    std:: string host;
    ...
    void swap(Contact& c)
    {
    std::swap(x,c.x);
    std::swap(host,c.host);//avec les string vont unique echanger leur memoire et évite ainsi des recopies inutile
    ...
    }
    ...
     
    };
    namespace std
    {
    template<>
    inline void swap<Contact> ( Contact& a, Contact& b )
    {
    	a.swap(b);
    };
    }
    ca accèlerera le sort. Ainsi les objet de la stl swapperon uniquement leur memoire au lieu d'utiliser un temporaire.
    Regarde ce thread si ca t'interesse :
    http://www.developpez.net/forums/sho...d.php?t=448897

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut
    Merci pour l'astuce.
    Je ne connaissais pas l'existance de cette fonction je vais essayer.

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

Discussions similaires

  1. Programme qui résout des fonctions. (CORRECTION)
    Par tonykart13 dans le forum Général Python
    Réponses: 1
    Dernier message: 04/03/2011, 10h23
  2. Programme qui intéragit avec logiciel
    Par enrico83600 dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 15/07/2010, 19h17
  3. Programme de tri avec fonctions
    Par adri010 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/05/2010, 18h30
  4. Programme qui bloque
    Par zehle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/01/2009, 17h13
  5. que choisir svp? créer un programme qui agirait en fonction d'une page internet
    Par tonyb13 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 07/12/2007, 13h29

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