Bonjour a tous !

J'avais déja posté ici il y a un certain temps , au sujet des nombres 64bits (pour introduire les tables de haschage dans mon programme d'échecs)
J'ai perdu entretemps mes identifiants donc je me réinscris ... et me re présente
Dany 50 ans , autodidacte dans le C depuis un certain temps (toujours des cheveux) et un hobby addictif : le développement d'un programme d'échecs en C.
J'ai un release qui joue (là notamment : http://www.open-aurec.com/chesswar/) mais je suis passé récemment de DEVC++ a code blocks et j'utilise maintenant un compilateur 64 bits mingw64
J'ai un segmentation fault depuis hier que je ne parviens pas a comprendre
Je ne peux pas poster tout les fichiers sources (!) je vais essayer d'être le plus précis possible
J'ai des structures pour créer les listes de coups et les sauvegarder :
dans définition.h :
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
 
#define COUP_MAX           499
#define PILE_COUPS        1000
typedef struct le_COUP
{
    int dep;	                                /*n°case depart du coup*/
    int arr;	                            /*n° case d'arrivee du coup*/
    int piece_jouee;              /*piece jouee  (roi , pion , etc ....*/
    int piece_prise;                                  /*piece capturee */
    int type;	            /*type de coup (normal ,prise roque etc...)*/
    signed int ep;		            /*case de prise en passant (VIDE ou n°case)*/
    int pion_ep;  /*n°case du pion pris en passant (pour jouer/dejouer)*/
    int val;                   /*valeur du coup apres evaluation rapide*/
    int piece_promue;                        /*en cas de promo val DTFC*/
} COUP;
 
 
/*------------------------------------------------------------------------------
|                structure pour sauvegarder les coups dans l'arbre              |                                                     |
|------------------------------------------------------------------------------*/
typedef struct coup_ARBRE
{
    COUP t;                        /*coup joue*/
    int  statut;	               /*coup dans biblio ou non (VRAI ou FAUX*/
    int  cap;                      /*si prise cap = etiquette piece*/
    ull  hashcode;                 /*code de la position*/
    int  coul;                     /*couleur piece prise*/
    int regle_50;                  /*valeur pour nul par 50 coups*/
    int enpassant;                  /*flag en passant : -1 ou numero case*/
} L_ARBRE;
Je déclare un tableau qui sauvegarde les coups joués lors de la recherche pour pouvoir les déjouer ensuite et un autre qui sert de pile , créant les coups légaux a chaque profondeur

dans datas.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
extern L_ARBRE       coups[COUP_MAX+1];
extern COUP pile_coups[PILE_COUP+1];
dans datas.c:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
L_ARBRE       coups[COUP_MAX+1];
COUP pile_coups[PILE_COUP+1];
Lorsqu'on joue un coup on doit sauvegarder un certain nombre d'infos sur la positon précédente ? je fais comme ça :
dans analyse.c :
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
 
int jouer_coup(int x)
{
    int    echec = 0;
    COUP   c;
    int xc = OPP(side);
 
    c = pile_coups[x];
       //----------------------------------------------------------------------------------------------------------------
    //                                 sauvegarde des données du coup précédent
    coups[nb_coups].t = c;          //index
 
    coups[nb_coups].statut = coup_biblio;       //coup biblio ou non
.....
}
ça marchait comme ça ... jusqu’à ce que je veuille ajouter deux tableaux dans la structure le_COUP pour sauvegarder l'état des roques (tables droit_OO[3] et droit_OOO[3]

Dans definition.h:
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
 
typedef struct le_COUP
{
    int dep;	                                /*n°case depart du coup*/
    int arr;	                            /*n° case d'arrivee du coup*/
    int piece_jouee;              /*piece jouee  (roi , pion , etc ....*/
    int piece_prise;                                  /*piece capturee */
    int type;	            /*type de coup (normal ,prise roque etc...)*/
    signed int ep;		            /*case de prise en passant (VIDE ou n°case)*/
    int pion_ep;  /*n°case du pion pris en passant (pour jouer/dejouer)*/
    int val;                   /*valeur du coup apres evaluation rapide*/
    int droit_OO[3]     /*statut petits roques*/
    int droit_OOO[3]    /*statut grands roques*/
    int piece_promue;                        /*en cas de promo val DTFC*/
} COUP;
ça m'a fait un segmentation fault a l'exécution suivante , j'ai supprimé les deux tableaux et là ça continue ! en mode débug de codeblocks le programme plante a chaque fois à une ligne où il y a coups[..].qquechose

Si j'entre un coup par exemple (sous la forme e2e4) le programme plante a la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 coups[nb_coups].t = c;          //index
de la fonction jouer_coups(int x)

J'avoue que je n'arrive pas a comprendre pourquoi ça plante , même en ayant supprimé les deux tableaux ... en un mot (lol) : Au secours !!!!
merci pour vos conseils et réponses éclairées !
dany le bricolo du C