Copie de vector

Résolu/Fermé
emmessse - Modifié le 3 mars 2023 à 15:50
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 14 avril 2023 à 15:31

Bonjour,

Je ne comprends pas pourquoi le vector restecorps_s n'est pas copié dans le vector corps_s à la ligne 15. J'ai vu ça dans mon débogueur, ainsi qu'en exécutant le programme

std::vector<std::string> parse::corps(){
  std::vector<std::string> restecorps_h, corps_s, restecorps_s, restecorps1_h;
  std::string mot_s;
  if (a.valeur == mot) {
    mot_s = a.lexeme;
    consommer(mot);
    restecorps_h.push_back(mot_s);
    while (a.valeur == mot){
      mot_s = a.lexeme;
      consommer(mot);
      restecorps_h.push_back(mot_s);
      restecorps1_h = restecorps_h;
      restecorps_s = restecorps1_h;
    }
    corps_s = restecorps_s;
    return corps_s;
  }
  else
    exit(4);
}

Quelqu'un a une idée?
Linux / Firefox 109.0

A voir également:

2 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 19 avril 2023 à 13:02

Bonjour,

Une chose certaine, si on copie un vector<>, il est sûr que la copie est effectuée.

Je ne sais pas quand et comment tu vérifies que la copie n'est pas faite.

Déjà les variable corps_s et restecorps1_h ne servent à rien et alors même en ôtant toutes les optimisations, c'est tellement flagrant que ces variables ont pues être enlevées. Le débogueur serait alors incapable de les afficher correctement.

L'autre possibilité est qu'il y a quelque part un écrasement de données te faisant perdre le vector<> retournée par la fonction, là il faut un peu plus examiner ce qu'il se passe ailleurs.

0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
14 avril 2023 à 15:31

Bonjour,

je rejoins Dalfab, corps_s ne sert à rien : c'est une variable locale qui est affecté avant d'être retourné et détruite (passage par copie). Elle reste identique à restecorps_s. Il y a de grandes chances que l'optimiseur fasse en gros : "return restecorps_s;" 

Tu peux essayer de désactiver les optimisations voir si ça fait un peu mieux ce que tu veux. 


0