Bonsoir,
J'ai un problème que j'ai réussi à reproduire avec le programme suivant :
J'ai une erreur (debug assertion failed) que je ne comprends pas sur la partie en rouge.
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
29
30
31
32
33
34
35
36
37
38 #include <list> class CMyClass { public: CMyClass(void) { } ~CMyClass(void) { } void Add(void) { m_class_list.push_back(CMyClass()); } // retourne une reference sur le dernier objet de la list CMyClass & Last(void) { // juste pour être sûr d'avoir au moins un objet if(m_class_list.size() == 0) Add(); std::list<CMyClass>::iterator it = m_class_list.end(); --it; return *it; } std::list<CMyClass> m_class_list; }; int main(int argc, wchar_t* argv[]) { CMyClass obj; CMyClass & last = obj; last = obj.Last(); return 0; }
Si je remonte la pile, cela provient d'ici dans le fichier source de list :
et je ne comprends pas le message : "list iterators incompatible".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool operator==(const _Myiter& _Right) const { // test for iterator equality #if _ITERATOR_DEBUG_LEVEL == 2 if (this->_Getcont() == 0 || this->_Getcont() != _Right._Getcont()) { // report error _DEBUG_ERROR("list iterators incompatible"); _SCL_SECURE_INVALID_ARGUMENT; }
Si quelqu'un sait m'expliquer ce que je fais mal ou alors peut être un bug dans l'implémentation de list de Microsoft (mais je n'y crois pas trop)
J'utilise Visual studio 2012, le fichier source de "list" est c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list
Merci d'avance pour vos explications
PS : heu ... dans la vrai vie, ma classe est un tout petit peu plus complexe que cela mais elle est récursive comme dans l'exemple fourni (je ne sais pas si récursive est le terme adéquat)
Partager