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;
};
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;
Mon problème vient du fait que l'appel à xdr_array provoque un segfault... enfin parfois seulement.
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 .