Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1019 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  probleme lors d'un erase() sur une liste

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme lors d'un erase() sur une liste

n°1304628
Photonium
Masse atomique : 0 uma
Posté le 13-02-2006 à 18:13:20  profilanswer
 

Bonjour,
 
Voila le bout de code qui pose probleme :  

Code :
  1. typedef list<data> ld;
  2. //...
  3. ld::iterator d = l.begin();
  4. while (d != l.end()) {
  5.     diffp=(u_ii - u_i)/u_ii;
  6.     diffn=(u_ii - u_iii)/u_iii;
  7.    
  8.     if (fabs(diffp + diffn) > 2) {
  9.       d--;
  10.       cout <<d->ti << " erased" << endl;
  11.       //l.erase(d);
  12.       d++;
  13.     }
  14.     u_i=u_ii;
  15.     u_ii=u_iii;
  16.     u_iii=(++d)->ti;
  17.   }


 
Quand je decommente la ligne 11 et je commente la 12, normalement je dois enlever l'element precedent.  
 
Or si la ligne 9 est décommentée, j'ai l'erreur suivante :  
 
 *** Break *** segmentation violation
 Generating stack trace...
 0x0804e258 in parser::time_eliminate() + 0x29e from ./fluorescence
 0x0804b9cd in main + 0x339 from ./fluorescence
 0xb66d9eb0 in __libc_start_main + 0xd0 from /lib/tls/i686/cmov/libc.so.6
 0x0804b611 in __gxx_personality_v0 + 0x89 from ./fluorescence
Abandon
 
Mais si elle est commentée le programme s'éxécute bien.  Quelqu'un aurait-il une idée ? Y a-t-il un probleme à se ballader dans les listes avec ++ et -- ?
 


---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33
mood
Publicité
Posté le 13-02-2006 à 18:13:20  profilanswer
 

n°1304689
francky06l
Posté le 13-02-2006 à 19:17:03  profilanswer
 

Juste quelque petits remarque, quand tu erase ton iterator est "perdu",  quand tu fais -- il faut tester par rapport l.begin(). (si tu erase le premier element).
De meme quand tu es a la fin, tu vas faire ++ 2 fois, or si tu es deja a end() ...y a un probleme..
Enfin a vue de nez vite fait comme ca, c'est dans les tests de limite qu'il y a un probleme

n°1304729
Photonium
Masse atomique : 0 uma
Posté le 13-02-2006 à 20:38:34  profilanswer
 

francky06l a écrit :

Juste quelque petits remarque, quand tu erase ton iterator est "perdu",  quand tu fais -- il faut tester par rapport l.begin(). (si tu erase le premier element).


 
Je croyais que erase() poussait mon iterator à l'élément suivant celui que je venais de supprimer. C'est pour cela que je simulais erase() par d++ . Ca change selon les compilateurs ?
 
 
Sinon mon code n'est pas finalisé donc il est possible qu'il y ait des problémes aux bords. Je regarderai.
 
Merci


Message édité par Photonium le 13-02-2006 à 20:40:24

---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33
n°1304868
francky06l
Posté le 14-02-2006 à 07:12:00  profilanswer
 

Je suis certain que erase n'incremente pas l'iterator (pour les STLPort au moins), par contre il retourne un iterator sur l'element suivant (donc faudrait faire quelque chose du genre d = l.erase(d)).

n°1304940
Taz
bisounours-codeur
Posté le 14-02-2006 à 10:15:21  profilanswer
 

oui exactement, il faut en faire quelque chose du retour de erase()

n°1305060
Photonium
Masse atomique : 0 uma
Posté le 14-02-2006 à 12:15:38  profilanswer
 

Taz a écrit :

oui exactement, il faut en faire quelque chose du retour de erase()


 
Merci, ça a l'air de marcher maintenant. Le pire, c'est que je ne faisais pas le d= pour une autre boucle et ça avait l'air de marcher...
 
A une prochaine.


---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  probleme lors d'un erase() sur une liste

 

Sujets relatifs
[CSS] Problème de compatibilité, IE againProbleme d'activation de private sub
affichage de liste <ul></ul> sur IE et FF[RESOLU]probleme curseur main
Problème de connexion.problème à la compilation MFC
[Css Html] Problème avec les marges internes "padding[PHP] Problème bizarre avecla banniere
Problème avec la fonction fopen()[HTML]Probleme avec mon site
Plus de sujets relatifs à : probleme lors d'un erase() sur une liste


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR