Bonjour à tous.
J'ai un "vector<string>" sur lequel je souhaite faire une itération. Lors de litération, il se peut que je doivent ajouter un élément à la fin du vecteur, mais qui ne doit pas compter (mon iteration doit se terminer sur le dernier élément présent au début de l'itération). J'utilise un iterator plutot que [] car je me sers de l'iterateur pour ensuite faire des suppression.
Il se trouve que lorsque j'ajoute des éléments , le programme segfault. J'ai réduit le code à cet exemple :
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
20
21
22
23
24
25
26
27
28
 
#include <iostream>
#include <vector>
using namespace std;
 
void addElem(vector<string>*); 
 
int main(int argc, char *argv[])
{
  vector<string> myvector;
 
   myvector.push_back("one");
   myvector.push_back("two");
   myvector.push_back("three");
   myvector.push_back("four");
   vector<string>::iterator iter,end ;
   end = myvector.end();
   for ( iter = myvector.begin(); iter != end; iter ++ ) {
      cout << (*iter) << endl;
      addElem(&myvector);
   }
 
  return 0;
}
 
void addElem(vector<string>*vec) {
   vec->push_back("five");
}
Le programme plante apres avoir affiché "two".
Je sais que la boucle "for" pourrait etre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
   for (unsigned int i = 0 ; i < 4 ; i ++ ) {
      cout << myvector[i] << endl;
      addElem(&myvector);
   }
mais j'ai besoins d'utiliser un iterator dans mon "vrai" code.

Pourriez vous me dire comment pouvoir ajouter des éléments à un vecteur lors d'une itération sans pour antant avoir de segfault (il semble que ce soit le fait que la fin du veteur change, malgré le fait que je le stocke).

Merci d'avance,

eponyme