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 :

Perte de données en sortie de fonction


Sujet :

C++

  1. #21
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Commençons par nettoyer ce qu'on peut nettoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Points
    {
        int nb_points() { return nb_pts; }; 
    private:
        int            nb_pts;
    }
    pourquoi ne pas utiliser
    --------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Points(Points& P)
    {
        nb_pts = P.nb_points();
        for(int i=0; i<P.nb_points(); ++i)
             vect_pts.push_back(P[i]);
    };
    Pourquoi ne pas utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Points(Points& P) : nb_pts(P.nb_points()) , vect_pts(P.vect_pts)
    {
    }
    --------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ostream& operator<<(ostream& out, Triangles T)
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ostream& operator<<(ostream& out, const Triangles& T)
    (sinon tu fais une copie)

  2. #22
    screetch
    Invité(e)
    Par défaut
    si c'est pour faire un wrapper a vector, autant utiliser vector.

  3. #23
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par screetch Voir le message
    si c'est pour faire un wrapper a vector, autant utiliser vector.
    Tu as raison : s'il fait un wrapper juste pour ajouter le nombre d'élément, autant utiliser vector.
    Mais on a vu aussi qu'il avait besoin d'une fonction d'ajout qui vérifie les doublons.

    La question est bonne : est-ce que le conteneur est le bon, et cela on ne peut pas trop le savoir car on ignore par exemple s'il a besoin de conserver l'ordre ou non.

    Dans tous les cas, ça ne nous explique pas le comportement étrange de ses données.

  4. #24
    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
    +1 sur le fait de ne pas définir un constructeur de copie / opérateur= inutile. C'est un risque de bug, ça fait plus de code à lire par l'utilisateur, et ça indique que la classe est spéciale, alors que dans du vrai code, la grande majorité des classes devraient être dans ce cas (ou alors avoir désactiver la copie). Les classes avec un constructeur de copie défini par l'utilisateur sont l'exception.

    Par un survol rapide, j'ai vu des aspects étranges dans le code, mais rien qui explique le plantage. En réorganisant le code pour le poster, n'as tu pas enlevé du code sans rapport avec le problème ? C'est classique dans ce genre de situation qu'en fait le code fautif n'ait aucun rapport avec le code où l'erreur apparaît.
    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.

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Par défaut
    Voici mon organisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    projet/
        main.cpp
     
    projet/includes/
        fonction_mailage.h
        triangles.h
        points.h
    Je compile avec codeblocks sous W7.
    Je ne compile que le main car je ne sais pas lier les autre .cpp. Du coup dans mes .h je n'ai pas que les classes et les prototypes, mais les fonctions complètes.

    Vous aviez raison. J'ai enlever tous mes includes de chacun de mes fichiers, et je les ai retapé tranquillement. Résultat : plus de bug. J'avais donc fait une erreur dans mes includes....

    Merci pour votre aide.

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Par défaut
    Effectivement j'utilise une classe car je vérifie lors de l'ajout d'un élément (Point ou Triangle) que celui-ci ne fait pas déjà parti de la liste. J'aurai peut-etre pu le faire via une fonction, et n'utiliser ainsi que les vector, mais je n'y ai pas pensé avant.

  7. #27
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par sythpen Voir le message
    J'avais donc fait une erreur dans mes includes....
    Que celui qui n'a jamais écrit : ou te jette la première exception.

    Je me rappelle (quand j'étais jeune hein, maintenant je suis grand, j'ai du poil à la barbe) avoir même écrit des , alors !!

    +1 point pour JB le coincoin qui a soulevé le problème.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant] Pas de données de sortie à ma fonction
    Par DocDjul dans le forum MATLAB
    Réponses: 10
    Dernier message: 04/07/2012, 14h40
  2. Format de données en sortie d'une procédure stockée
    Par Martin Sylvie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/02/2005, 12h02
  3. Crash InnoDB,perte de données définitives... Info ou Intox ?
    Par Alexandre T dans le forum Administration
    Réponses: 3
    Dernier message: 17/01/2005, 10h44
  4. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37
  5. formatage de données en Sorties
    Par Bjuice2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2004, 15h56

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