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 :

Valeur d'un pointeur après boucle if/else


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut Valeur d'un pointeur après boucle if/else
    Bonjour à tous,

    Ma question porte sur la valeur à un pointeur déclaré au début d'une portion de code, et assignée dans une boucle if/else.
    La variable en question est bel et bien remplie dans les boucles, mais à la sortie elle est vide et je ne comprends pas pourquoi...

    Voici un aperçu du code que j'ai implémenté. Mon but est d'assigner une valeur particulière à mon objet "my_splineCurve" en fonction des paramètres choisis par l'utilisateur :
    • soit il choisi le traitement n°1 --> on applique l'algo n°1 et on retourne la valeur finale de my_splineCurve
    • soit il choisi le traitement n°2 --> on applique par défaut l'algo n°2 qui assigne une valeur à my_splineCurve puis l'utilisateur a encore le choix entre 2 traitement supplémentaires (qui prennent en entrée la sortie de l'algo n°2)
      • il choisi de faire en supplément le traitement n°3 --> on applique l'algo n°3 et on retourne la valeur finale de my_splineCurve
      • il choisi de faire en supplément le traitement n°4 --> on applique l'algo n°4 et on retourne la valeur finale de my_splineCurve


    Voici donc le code très simplifié qui correspond à ma description :

    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
     // on a l'objet result_spline_finale que je souhaite remplir avec les boucles ci-dessous,
     // puis que je souhaite ajouter à mon Vector de stockage "output_list"
    my_splineCurve* result_spline_finale = new my_splineCurve();
    
    if(traitement n°1){
        my_splineCurve result_spline = fitting->algo1();
        result_spline_finale=&result_spline;
    }
    else{ //traitement n°2
        my_splineCurve result_spline_intermediaire = fitting->algo2();
        result_spline_finale=&result_spline_intermediaire;
    
        if(traitement n°3){
                my_splineCurve result_spline3 = fitting->algo3(result_spline_intermediaire);
                result_spline_finale=&result_spline3;
        }
        else if(traitement n°4){
                my_splineCurve result_spline4 = fitting->algo4(result_spline_intermediaire);
                result_spline_finale=&result_spline4;
        } // ICI result_spline_finale est bien remplie
    }
     // ICI result_spline_finale n'est PAS bien remplie (valeurs indiquant un mauvais pointeur genre 321e10 )
     // Ajout de result_spline_finale dans la liste des output 
    output->setData(result_spline_finale);
    output_list.append(output);
    
    result_spline_finale=NULL;
    delete result_spline_finale;
    Une solution est de déplacer output->setData(result_spline_finale); dans les boucles, mais je préférerais le laisser à la fin (au cas où je rajoute d'autres traitements c'est plus propre il me semble)

    Vos explications et commentaires sur mon code sont les bienvenus ! Et n'hésitez pas à me demander si je n'ai pas mis assez d'explications...

    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu mémorises l'adresses de variables locales à des blocs, qui sont détruites en sortie des blocs en question.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Vous récupérez un pointeur sur des variables locales au bloc de code entre accolades, qui sont libérées en sortie de bloc (l'accolade fermante).

    Le plus simple, c'est de ne pas utiliser de pointeur (et ça évitera des fuites mémoire).

    Utilisez directement un objet et affectez lui directement les valeurs retournées par les méthodes de fitting.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Par défaut
    C'était aussi simple que ça.... Je ne l'avais pas du tout vu !
    Tout fonctionne correctement maintenant.

    Merci à vous

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2009, 14h51
  2. retourner valeur max après boucle
    Par flora806 dans le forum Langage
    Réponses: 4
    Dernier message: 22/02/2008, 17h13
  3. Réponses: 2
    Dernier message: 23/10/2005, 18h05
  4. Réponses: 3
    Dernier message: 11/08/2005, 15h54
  5. récupérer valeur d'un ID après insertion
    Par rikidi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/08/2003, 22h21

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