Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur lors de la création d'une tuple

Sujet résolu
    7 septembre 2021 à 19:19:01

    Salut tout le monde,

    Je voulais créer un vector contenant des tuples qui se remplirait à partir d'un fichier lors de son initialisation.
    Comme ce vector se trouve dans une fonction et que je ne veux pas réouvrir le fichier un milliards de fois pour reremplir le vector, j'ai pensé à déclarer le vector comme étant static. le rôle de cette fonction est de me renvoyer une tuple du vector (en générant un indice aléatoire), le code suivant ne doit pas être bien compliqué à comprendre :

    std::tuple<std::string, Sexe> genId() {
        static std::vector<std::tuple<std::string,Sexe>> identities{initId()};
        auto tup {identities[aleaNombre(0,10000)]};
        return tup;
    }

    Notez que initId() est la fonction qui rempli le vector à partir du fichier.
    Le déboggeur m'indique qu'il y a une erreur à la ligne suivante du fichier tuple(header):

     constexpr _Tuple_impl(const _Tuple_impl&) = default;

    Avec un beau message d'erreur : -var-create: unable to create variable object   (segmentation fault)

    Merci à tous ceux qui répondront.

    • Partager sur Facebook
    • Partager sur Twitter
      7 septembre 2021 à 19:29:16

      MassinissaAbboud a écrit:

      Le déboggeur m'indique qu'il y a une erreur à la ligne suivante du fichier tuple(header):

       constexpr _Tuple_impl(const _Tuple_impl&) = default;

      Avec un beau message d'erreur : -var-create: unable to create variable object   (segmentation fault)

      L'erreur n'est pas là, elle est dans ton code. C'est quelle ligne qui pose problème ? Tu es sur que ton tuple est copiable ? Pourquoi tu ne retournes pas une référence constante ?

      • Partager sur Facebook
      • Partager sur Twitter
        7 septembre 2021 à 20:57:46

        Oui désolé j'avais oublié de préciser que c'était à l'initialisation de tup qu'il y avait un problème:

        auto tup {identities[aleaNombre(0,10000)]};

        J'avais mis la ligne du fichier tuple pour vous aider à comprendre l'erreur (qui bien évidemment vient de mon code et non de celui de la STL).

        Finalement l'erreur venait de la fonction initId() j'avais oublié un return :-°.

        Et oui tu as raison il est mieux de retourner une référence constante.

        Par contre je ne comprends pas ce que tu veux dire par est ce que ton tuple est copiable?

        • Partager sur Facebook
        • Partager sur Twitter
          7 septembre 2021 à 21:11:30

          MassinissaAbboud a écrit:

          Par contre je ne comprends pas ce que tu veux dire par est ce que ton tuple est copiable?

          L'erreur était sur le constructeur par copie de tuple, donc le problème pouvait venir de la copie.
          • Partager sur Facebook
          • Partager sur Twitter
            7 septembre 2021 à 22:06:29

            Ah d'accord merci beaucoup.
            • Partager sur Facebook
            • Partager sur Twitter

            Erreur lors de la création d'une tuple

            × 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