Bonjour
J'ai un bout de code qui plante curieusement sur un(ou Liberties est un tableau)
Code : S�lectionner tout - Visualiser dans une fen�tre � part delete [] Liberties;
Le code est lanc� par cette fonction: (dont je ne met que le d�but)
Jusque l�, il s'execute normalement, la fonction Addlib y est appell�e corectement.
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 inline bool Goban::PlayMove(const point2D &pt){ if (GameTab[pt.X][pt.Y]==0 && pt!=Ko){ GroupStone *Gr=new GroupStone(pt,Player); AddGroup(*Gr); GameTab[pt.X][pt.Y]=NumGroups; // CHECKING LIBERTIES & Other's Groups if (pt.X!=0){ if(GameTab[pt.X-1][pt.Y]==0){ Gr->Addlib(point2D(pt.X-1,pt.Y)); }else{ //Rien d'intéressant, le code ne passe pas par là } }
Voici la suite de la fonction:ici, il plante sur Addlib
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 int u=0; if (pt.X!=Sz){ if(GameTab[pt.X+1][pt.Y]==0){ Gr->Addlib(point2D(pt.X+1,pt.Y));// CA PLANTE ICI }else{ //rien d'interessant ici non plus }} ...//je met pas la fin }
En voici donc la d�claration:
� la premiere execution, tout se passe bien � la seconde execution, il plante sur Dellib (lib);
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 void GroupStone::Addlib(const point2D & lib){//should not be called if the group is empty cout<<"Addlib "<<lib.X<<" "<<lib.Y<<endl; int ad=0; if (inited){ Dellib(lib);//ça plante là la seconde fois !! point2D *plib= new point2D [Numlib]; for (int i=0;i<Numlib-1;i++) plib[i]=Liberties[i]; plib[Numlib]=lib; delete []Liberties; Liberties=plib; Numlib++; }else{ //rien d'interessant } }
voici donc le code de cette fonction:
De m�me, l'execution de cette fonction est impeccable au premier passage et plante au second sur le
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 void GroupStone::Dellib(const point2D &lib){ int del=0; point2D *prov= new point2D [Numlib]; int overlib=0;//if the liberty is finded for(int i=0;i<Numlib;i++){ if (Liberties[i]==lib){ overlib++; }else{ prov[i-overlib]=Liberties[i];} } delete []Liberties; //ça plante là au second passage Liberties=prov; }Par ailleur, j'ai v�rifi� que au moment ou s'execute le delete []Liberties; pour la seconde fois, Liberties est un tableau de 1 valeur (donc non vide)...
Code : S�lectionner tout - Visualiser dans une fen�tre � part delete []Liberties;
si vous avez une id�e...
Merci d'avance et d�sol� pour vos cheveux![]()
Partager