Bonjour à tous, j'ai un petit problème avec la fonction xdr_array :/
Mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef struct s_game_data { int flag; int idClient; int size; t_xdr_door door; t_xdr_obstacle *tabObs; t_person *tabPerson; } t_game_data;
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 bool_t xdr_person(XDR *xdrs, t_person *t) { if (!xdr_int(xdrs, &t->current)) return 0; if (!xdr_int(xdrs, &t->mark)) return 0; if (!xdr_array(xdrs ,(char**)&t->path ,&t->current ,_MAX_PATH_SIZE ,sizeof (int) ,(xdrproc_t)xdr_int)) return 0; return 1; };Mon problème vient du fait que l'appel à xdr_array provoque un segfault... enfin parfois seulement.
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 bool_t xdr_game_data(XDR *xdrs, t_game_data *t) { if (!xdr_int(xdrs, &t->flag)) return 0; if (!xdr_int(xdrs, &t->idClient)) return 0; if (!xdr_int(xdrs, &t->size)) return 0; ... if (!xdr_array(xdrs ,(char**)&t->tabPerson ,(unsigned int*)&t->size ,(unsigned int)10 ,sizeof (struct s_person) ,(xdrproc_t)xdr_person)) return 0;
Quand sa fonctionne c'est ok durant toute l’exécution du serveur peu importe le nombre d'appels client que je lance.
J'ai remarqué que quand sa plante c'est direct dans xdr_person() au premier xdr_int et l'adresse de 't' dans xdr_game_data() et xdr_person() est différente, par contre quand sa passe elle est identique.
Si quelqu'un à une idée je suis preneur xd
Merci d'avance pour vos réponses .
Partager