Copie de vector

Résolu
emmessse -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -

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   Statut Membre Dernière intervention   101
 

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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 

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