[c++] Erreur Windows

Crovax -  
 Crovax -
Bonjour à tous!

J'avais commencé à programmer un logiciel qui jouerait au shôgi (echecs japonais), sans aucun souci, jusqu'au moment où, après 2000 lignes de codes tapées j'ai voulu faire quelques tests, et là, malgré une compilation impeccable, l'execution du programme génère une erreur windows ("CrazyShogi.exe a rencontré un problème et doit maintenant fermer etc...").

J'ai réussi à isoler l'erreur dans un programme miniature que voici, pour lequel je n'ai aucune erreur de compilation, mais dont l'execution génère toujours la même erreur ; y aurait-il une âme généreuse qui pourrait m'aider à comprendre l'origine de cette erreur (vraiment chiante)? Il faut dire aussi que je suis toujours sous Windows XP SP1, et que la mise à jour au SP2 est impossible pour des raisons d'incompatibilité matérielle. Quelqu'un pourrait-il chercher à compiler puis executer ce bout de code? :


#include <iostream>
using namespace std;

const int COLONNES=5;
const int LIGNES=5;

struct liste_coordonnees
{
int coord[12];
int nb;
};

typedef int plateau[COLONNES][LIGNES];

struct jeu
{
plateau partie;
plateau controles;
double evalpos_joueur1;
bool MAT;
};

void Decompresser_Coord(int coord, int &i, int &j)
{

i = coord/10;
j = coord - (10*i);
}

void Initialiser_Coord(liste_coordonnees& adj1, liste_coordonnees& adj2)
{
adj1.coord[0]=1;
adj1.coord[1]=2;
adj1.coord[2]=10;
adj2.coord[0]=43;
adj2.coord[1]=33;
adj2.coord[2]=34;
adj1.nb=3;
adj2.nb=3;
}

void Initialiser_Partie(jeu& partie)
{
partie.partie[0][0]=1; // Le roi du joueur 1 est repéré par le chiffre 1
partie.controles[0][1]=1;
partie.controles[1][1]=1;
partie.controles[1][0]=1;
partie.partie[4][4]=-1; // La roi du joueur 2 est repéré par le chiffre -1
partie.controles[4][3]=1;
partie.controles[3][3]=1;
partie.controles[3][4]=1;
}

void Position_Roi(jeu& partie)
{
int eval1=0; // Evaluation de la position du roi pour le joueur 1 (compté positivement)
int eval2=0;// Evaluation de la position du roi pour le joueur 2 (compté négativement)
int k, l;
liste_coordonnees adj1; //Coordonnees des cases adjacantes au roi du joueur 1
liste_coordonnees adj2; //Coordonnees des cases adjacantes au roi du joueur 2
Initialiser_Coord(adj1, adj2); //Initialisation des listes de coordonnees

//Application de la formule, définie arbitrairement, afin d'évaluer la position du roi :

for(int i=0 ; i < adj1.nb ; i++)
{
Decompresser_Coord(adj1.coord[i], k, l);
eval1+=((partie.controles[k][l])+(partie.partie[k][l]/(abs(partie.partie[k][l]))));
}
for(int i=0 ; i < adj2.nb ; i++)
{
Decompresser_Coord(adj2.coord[i], k, l);
eval2+=((partie.controles[k][l])+(partie.partie[k][l]/(abs(partie.partie[k][l]))));
}
eval1=eval1/adj1.nb;
eval2=eval2/adj2.nb;
partie.evalpos_joueur1 = partie.evalpos_joueur1 + eval1 + eval2;
}

int main()
{
jeu nouveau;
Initialiser_Partie(nouveau);
Position_Roi(nouveau);
cout<<nouveau.evalpos_joueur1;
}
A voir également:

1 réponse

Crovax
 
J'ai compris tout seul où le code ne fonctionnait pas (ptdr) en fait il effectue une division par 0 dans la première boucle. Il suffit donc que je rajoute un test...
0