Bonjour,
Alors, j'ai un problème assez bizarre.
Je fais juste une mini bibliothèque pour gérer les threads pour une autre bibliothèque plus grosse. Et j'ai l'exception "pure virtual method called" qui arrive dans un cas particulier.
Je précise tout de suite, cela ne provient pas de l'appel d'une méthode virtuelle dans un constructeur ou un destructeur. J'ai lu quelque part que ça pouvait provenir d'autres choses. J'ai vu ici : http://www.artima.com/cppsource/pure_virtual.html qu'il pouvait y avoir une autre possibilité dû à un "Dangling Pointer", mais j'avoue ne pas avoir clairement compris ce que c'était (du moins ce que j'ai compris, c'est juste quand il y a un appel sur un objet "deleté")
Enfin, le problème, c'est que le code suivant marche parfaitement :
Mais que le suivant (que je preférerais utiliser à tous les coups pour que le lancement d'exception ne fasse pas n'importe quoi) :
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 class MonThread : public Thread { public: void run() { //something } }; int main(void) { MonThread t; t.start(); t.join(); return EXIT_SUCCESS; }
ne fonctionne pas alors que le destructeur appelle join.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int main(void) { MonThread t; t.start(); return EXIT_SUCCESS; }
Donc, est-ce que quelqu'un aurait une idée d'où pourrait provenir une telle exception (ormis les deux cas d'appel de méthode virtuelle dans un destructeur ou un constructeur) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Thread::~Thread() { join(); _group = 0; pthread_mutex_destroy(&_waitMutex); pthread_cond_destroy(&_waitSynchro); }
Partager