Mon code n'a aucune erreur de compilation. Il semble avoir une erreur d'exécution. Dans le morceau de code suivant, lorsque la boucle while est exécutée pour la première fois, tout fonctionne correctement. Mais à la deuxième itération, tout s'arrête à "list :: itérateur k = (temp2-> store) .begin();". Quand je commente la partie "list :: iterator k ..." tout fonctionne bien. Les variables temp2 et temp2-> store ne sont pas NULL ou vides. Le débogueur a donné le message suivant "Exception non gérée à 0x009bc0cf dans le projet euler.exe: 0xC0000005: Emplacement de lecture de violation d'accès 0xddddddf5".Puis-je définir un itérateur dans une boucle while?
struct edge
{ int end1, end2;
ptr_to_edge *ptr_end1, *ptr_end2;
edge *next, *l_chd, *r_chd;
edge(): next(NULL), l_chd(NULL), r_chd(NULL), ptr_end1(NULL), ptr_end2(NULL)
{ }
};
struct ptr_to_edge {
int flag, vertex;
list<edge*> store;
ptr_to_edge(): flag(1)
{ }
};
void parallel_reduction_step(ptr_to_edge *front, vector<edge> &a) {
list<edge*>::iterator next = (front->store).begin();
next++;
list<edge*>::iterator current = (front->store).begin();
list<edge*>::iterator last = (front->store).end();
--last;
while(current!= last) {
if(((*current)->end1 == (*next)->end1)&&((*current)->end2==(*next)->end2)) {
edge temp1;
temp1.end1 = (*current)->end1; temp1.end2 = (*current)->end2;
a.push_back(temp1);
ptr_to_edge *temp2;
if ((*current)->end1==front->vertex)
temp2 = (*current)->ptr_end2;
else
temp2 = (*current)->ptr_end1;
list<edge*>::iterator k = (temp2->store).begin();
current = (front->store).erase(j);
*current = &(a.back());
}
else current++;
next++;
}
};
Désolé. Je ne peux pas vous aider si je ne peux même pas lire votre message. –
Le premier problème de votre code est que vous utilisez trop de variables à une lettre et que vous imbriqué trop de blocs. C'est entièrement illisible. Essayez d'utiliser des noms de variables sensibles et de diviser la fonction en composantes afin de faciliter la compréhension et la compréhension. –
@ user416689: Quelle est la valeur de temp2 lors de cette deuxième traversée? Et quelle est la valeur de temp2-> store. Ma conjecture est que temp2 ou temp2-> store est NULL. –