[Dev-C++]Problème avec une file ...
bonjour!
je vous expose mon petit probleme. je suis en train de programmer un petit jeu d'echecs, et je me retrouve face a un curieux phenomene.
pour tester la validite du coup entre par l'adversaire, je genere la liste des coups possibles, que je stocke sous forme de file ( FIFO, mais peu importe ), puis je parcours la liste pour verifier que le coup entre s'y trouve bien. or, pour une raison que je n'explique pas, le programme ne considere pas le dernier element de la liste. il le saute simplement. ( en clair, si ma fonction qui genere les coups trouve 12 coups, ce qui est confirme par l'attribut nbElt de ma file, et que j'essaie de jouer le 12e ( celui qui a ete trouve en dernier ), le programme me repond qu'il s'agit d'un coup illegal, en d'autre terme lorsque je parcours ma liste pour y verifier la presence dudit coup, je ne regarde que les 11 premiers )
ce qui est etrange c'est qu'avant d'arriver a trouver ca, j'ai fait une petite fonction qui affiche cette liste de coup a l'ecran, et celle ci fonctionne tres bien, alors qu'elle repose exactement sur le meme principe. de plus, lorsque je tente un debug, dev-c++ me signale une segmentation fault des le 2e element de la liste, alors que quand je ne suis pas en mode debug ca fonctionne ( en plus, quand il signale la segmentation fault, les pointeurs incrimines sont tous non NULL ). 3 jours que je seche, alors votre aide serait la bienvenue. Au risque de faire un peu long, je vous libre 2 3 bouts de codes :
La fonction qui affiche la liste de coup : cette boucle while va afficher 12 coups
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
void dbg_listeCoup(int couleur)
{
char out[8];
fileCoups dbg_f=trouveCoups(couleur);
while(!dbg_f.isEmpty())
{
san_export (dbg_f.pop(),out);
cout << out << endl;
}
} |
La portion qui teste la validite du coup : cette boucle while n'en voit que 11 alors que current_f.nbElt vaut bien 12
Code:
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
|
int valide=0;
cin >> buf ;
coup temp=san_import(buf);
while(!current_f.isEmpty())
{
if(temp == current_f.pop())
{
valide=1;
break;
}
}
if(valide)
{
fait_coup(temp);
joue();
}else{
cout << "illegal move" << endl;
current_f=trouveCoups(yourColor);
} |
et (pardon ca va faire long ) le code de ma file :
Code:
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
|
fileCoups::fileCoups()
{
tete=NULL;
queue=NULL;
nbElt=0;
}
void fileCoups::push(coup c)
{
fileItem * temp;
temp=new fileItem;
temp->value=c;
temp->suivant=NULL;
if ( isEmpty())
{
tete=temp;
queue=temp;
}else{
queue->suivant=temp;
queue=temp;
}
nbElt++;
}
coup fileCoups::pop()
{
fileItem * temp= tete;
if ( ! isEmpty())
{
tete=tete->suivant;
nbElt--;
return temp->value;
}else{
coup c;
c.pieceBouge=-1000;
return c;
}
}
int fileCoups::isEmpty()
{
return tete == NULL;
} |
Re: [Dev-C++]Problème avec une file ...
Citation:
Envoyé par jobherzt
je vous expose mon petit probleme. je suis en train de programmer un petit jeu d'echecs, et je me retrouve face a un curieux phenomene.
Hum.. Tu devrais peut-être plutôt te concentrer sur la logique de ton appli et utiliser ce qui existe déjà pour le "bas-niveau" => std::queue (& deque).
Où si tu veux vraiment tout refaire, tu blindes ce genre de facilités très propices aux erreurs. Dans un module tu ne fais que ça, et tu prévois une baterie de tests unitaires pour tester ta queue dans les cas nominaux et aux limites.