Salut,
l'opérateur new crée un objet en mémoire. (ligne 7) et te retourne un pointeur
le fait de l'ajouter à ton tableau (ligne 21) ne va pas créer un second objet qui serait une copie du premier.
Donc ligne 23 et 24 lorsque tu nettoies puis supprimes ton objet cc, ton tableau cc_tab1 contiendra un pointeur vers un objet détruit.
Je ne suis pas sûr que ça soit la source de ton erreur, mais il est certain que cela n'aide pas.
Supprime les lignes 23 et 24 !
Tel que, il n'est pas possible de réutiliser la meme instance de 'cc' si tu as pour tableau un vector de pointeur '.vector<ConnectedComponent*> cc_tab1 '
Si ton tableau était un vector d'objet ( 'vector<ConnectedComponent> cc_tab1' ), tu pourrais les ajouter par copie et donc là, oui, réutiliser la même instance. Tu n'aurais d'ailleurs même pas besoin de créer et de supprimer ton objet. 'cc' pourrait être une simple variable locale.
Pour ce qui est de ton erreur dans un vecteur, il y a plusieurs possibilités. Celle qui me saute aux yeux est la suivante :
Code :
- if(marked[i]==true)
- 13. {
- 14. string f= m_vertices[i];
- 15. cout<<"m_nodes.push_back(f)" << endl;
- 16. cc->m_nodes.push_back(f);
- 17. cout<<"cc.m_nodes["<<i<<"]="<< cc->m_nodes[i]<< endl;
- 18. queue.erase( queue.begin());
- 19. }
|
Si marked[i] vaut false, il n'y a pas d'ajout à ton tableau interne cc->m_nodes. Donc cc->m_nodes et marked n'ont plus la même taille dès lors que cela se produit une fois.
A partir de là, à la prochaine itération où marked[i] vaudra 'true', ton expression 'cc->m_nodes[i]' va provoquer un plantage puisque m_nodes et marked n'ont plus leurs éléments alignés suivant le même index. On aura même cc->m_nodes.size() < i. D'où effectivement une possible exception dans un vector.
Remplace la ligne 17 par
Code :
- cout<<"cc.m_nodes["<<i<<"]="<< cc->m_nodes[cc->m_nodes.size()-1]<< endl;
|
Message édité par deidril le 16-08-2013 à 14:44:35
---------------
Ce qui ne nous tue pas nous donne des points d'expériences