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 :

Fonction qui renvoie une variable locale.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut Fonction qui renvoie une variable locale.
    Bonjour

    Je n'arrive pa a comprendre pourquoi il faut pas faire ca:
    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
     
    void
           trash_stack
           ( void )
    {
           int dummy = 1;
    }
     
    int& f(int a){
           a++;
           return a;
    }
     
    int& g(int o){
           int& a=f(o);
           trash_stack();
     
            return a;
    }
    Ou plutot, pourquoi ca, ca plante. Ca renvoie pas 1. En passant en Assembly, j'arrive a comprendre, mais en restant en C++, pas moyen de comprendre pourquoi.

    Merci

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Dans f() tu renvoies une référence sur un temporaire qui est détruit quand tu quittes la fonction... => dangling référence boum.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    C'est le passage par valeur qui fait que ta variable est temporaire à l'exécution des fonctions. Un passage par référence pour permettre l'enchainement des fonctions :
    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
    void
           trash_stack
           ( void )
    {
           int dummy = 1;
    }
     
    int& f(int &a){
           a++;
           return a;
    }
     
    int& g(int &o){
           int& a=f(o);
           trash_stack();
     
            return a;
    }

  4. #4
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    ok, et ca pourquoi ca fonction??
    pourquoi u possède bien la valeur 1?

    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
    int& fdsf2(int& u)
    {
    	int o=1;
    	trash_stack();
    	return o;
    }
     
     
    void main(){
    	int h=2;
    	int u=fdsf2(h);
    //p=&u;
    //int o=gg(u);
    // std::cout << o << std::endl;
    }
    Ici o est aussi une variable locale

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Comportement indéfini.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Goten Voir le message
    Comportement indéfini.
    qui veut dire : plantage ou pas plantage ou fait le café...

    Au passage, ce n'est pas void main() mais int main() ou int main(int argc, char* argv[])

Discussions similaires

  1. [VBA] fonction qui reçoit une variable comme arguments
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/07/2007, 11h21
  2. Fonction qui renvoi une structure (requette)
    Par mael94420 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 05/07/2007, 13h43
  3. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 21h22
  4. [?] Fonction qui renvoie une table
    Par Dimitri_87 dans le forum Oracle
    Réponses: 2
    Dernier message: 05/04/2007, 11h48
  5. Fonction qui change une variable
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2006, 12h54

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