Bonjour,

Voici bientôt 2 heures que je bute sur la même erreur, voici le bout de code en question:
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
 
// Ici une méthode static de Server appelé par un thread
// data est une référence vers ma classe Server
void* Server::loopISA(void* data){
	Server* _this = reinterpret_cast<Server*>(data);
	while(true) {
 
		// Je parcours une liste de client
		vector<struct Client>::iterator it;
		for (it = lsClient.begin(); it!=lsClient.end ();++it) {
 
			// Je créér une instance d'une Classe MessageTimer 
			MessageTimer mISA(Message(Message::ISA,"Are you alive?")); 
			mISA.setReceiver(it->sin);
			mISA.send(_this->_sockfd); //Message bien envoyé et recu à l'addresse it->sin 
 
			// lsSendBackMsg est un attribut de ma classe Server: vector<MessageTimer>	lsSendBackMsg;
			_this->lsSendBackMsg.push_back(mISA);
 
			cout << "port:" << ntohs(_this->lsSendBackMsg.back().getReceiver().sin_port) << "=?=" << ntohs(mISA.getReceiver().sin_port) << endl;
			cout << "type:" << _this->lsSendBackMsg.back().getType() << "=?=" << mISA.getType() << endl;
Mon Objet mISA s'affiche parfaitement bien: mISA.getReceiver().sin_port et mISA.getType() retourne bien ce qu'il faut, en revanche une fois inséré dans ma liste avec lsSendBackMsg.push_back(mISA); l'objet lsSendBackMsg.back() me retourne n'importe quoi:

Voici un éxemple d'éxécution: (aucune erreur/warning à la compilation)
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
 
// port=40765 et type=13 attendu 
port:0=?=40765 
type:13=?=13
 
port:0=?=40765
type:13=?=13
 
port:0=?=40765
type:13=?=13
 
port:52489=?=40765
type:13=?=13
 
port:52489=?=40765
type:13=?=13
 
port:52489=?=40765
type:13=?=13
 
port:0=?=40765
type:13=?=13
 
port:0=?=40765
type:13=?=13
 
port:0=?=40765
type:13=?=13
 
port:0=?=40765
type:13=?=13
Je précise qu'il n'y a aucun autre thread lancé en concurrence, il n'y a que ce thread qui modifie et parcours cette liste pendant l'éxécution de mon programme...

Merci de votre aide,

@J'ajoute le code des classes MessageTimer et Message (ne sait-on jamais...)
Je n'ai laissé que les méthodes utilisées.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
#ifndef _Message_hh
#define _Message_hh
 
#include <vector>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <sstream>
 
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
 
#include <stdarg.h>
#include <string.h>
 
#define CONTENT_SIZE 510
 
using namespace std;
 
class Message {
 
	private:
	int 	_type;
 
	char	_c_content[CONTENT_SIZE];
	int 	_c_offset;
 
 
	struct sockaddr_in		sender;
	struct sockaddr_in 		receiver;
 
	//Construction par buffer
	public: 
 
	//Construction par type + content
	Message(int type=0,const string& content=""){
		_type=type;
 
		strcpy(_c_content,content.c_str());
		_c_offset=content.length();
	}
 
	//Construction par copie
	Message(const Message& msg){
		*this=msg;
	}
 
	Message& operator=(const Message& msg){
		for(int i=0;i<(int)msg._c_offset;i++) 
			_c_content[i]=msg._c_content[i];
		_c_offset=msg._c_offset;
		_type=msg._type;
		return *this;
	}
 
	// Envoie le message au receiver
	void send(int sockWrite){
		// un sendto() ....
	}
 
 
	//Getter & Setter
	public: 
		//getter,setter Adresse recepteur
		void setReceiver(const sockaddr_in &sin){
			receiver=sin;
		}
 
		const sockaddr_in& getReceiver() const {
			return receiver;
		}
 
 
		const int getType() const{
			return _type;
		}
};
#endif
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
 
#ifndef _MessageTimer_hh
#define _MessageTimer_hh
 
#include "Message.hh"
#include <time.h>
 
class MessageTimer: public Message {
 
	private:
	time_t	_time;
	int	_nbSendBack;
 
	public:
	// Construction d'un messageTimer
	MessageTimer(const Message& msg,const int nbSendBack=0): Message(msg) {
		_time=time(NULL);
		_nbSendBack=nbSendBack;
	}
};
#endif