Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question basique sur le retour d'une adresse

Retour d'une adresse vers un entier

Sujet résolu
    20 mars 2018 à 16:19:25

    hello,

    Je cherche à retourner un pointeur vers un entier dans une fonction:

    int * fonction_return_adr(void){
        int n = 10;
        return &n;
    }

    Mais quand, j'affiche le résultat :

    printf("Sortie par adresse %i \n", *fonction_return_adr());

     Je tombe sur un seg fault à la place de 10;

    Du coup, je souhaiterai être sur de savoir pq :

    Dans la fonction, un entier n est défini avec une portée locale, son adresse est retournée. Cependant, à cause de la portée locale, la valeur ainsi que son adresse n'est pas conservée par le programme, et lorsque que je demande la valeur, le programme n'est pas content parce qu'il utilise l'adresse pour une autre application. et renvoie un seg fault ?

    C'est ca ? A peu prés ? Pas du tout ? :D

    matop





    -
    Edité par matop 20 mars 2018 à 16:28:09

    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2018 à 17:03:51

      Coucou,

      C’est à peu près ça.

      À la sortie de la fonction, la zone mémoire contenant la variable est libérée. Son adresse n’est donc plus allouée pour ton programme.
      Ce n’est cependant pas ton programme qui n’est pas content, c’est l’OS qui le tue.

      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2018 à 17:18:28

        Ah yes, merci pour cette précision

        Ca commence à rentrer :)

        • Partager sur Facebook
        • Partager sur Twitter

        Question basique sur le retour d'une adresse

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown