Bonjour,
J'ai un problême avec les std::list du c++ lors de la suppression d'un élément de la liste.
Mon but est de pouvoir insérer/supprimer/rechercher rapidement **toutes** les entrées avec des coordonnées (i,j) spécifiques
J'arrive bien à retrouver ces entrées sans pb avec une boucle qui itère du premier au dernier élément de la liste, mais lorsque je supprime cette entrée, le programme plante juste après
=> je me retrouve donc pour l'instant bloqué à devoir mettre un break immédiatement après la première suppression afin que ce petit programme de test ne plante pas ... alors que je voudrais qu'il continue l'itération afin de supprimer les autres occurences qui correspondent à ce type d'entrée
Le morceau de code qui crée pb est celui-ci :
=> si je supprime le break après le LIS.erase(iter), ça plante
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 void Destroy(int i, int j) { std::list<entry_t>::iterator iter; int step = 0; printf("Destroy entries (%d,%d,xxxx)\n", i, j); for( iter = LIS.begin() ; iter != LIS.end() ; ++iter, ++step) { printf(" Test entry %d (%d,%d,%d) with (%d,%d,xxxx): ", step, iter->i, iter->j, iter->coef, i, j ); if( (iter->i == i) && (iter->j == j) ) { LIS.erase(iter); printf("erased \n"); break; } else { printf("no erased \n"); } } }
Qu'est-ce qui ne va pas dans ce boût de code ?
J'ai mis en pièce jointe un exemple de code qui crée le pb
Sous Linux, ça se compile via g++ test.cpp -o test -std=c++11
(j'y ai mis le -std=c++11 car sinon g++ me sort tout un tas de warnings)
@+
Yannoo
Partager