Bonjour

J'ai un bout de code qui plante curieusement sur un (ou Liberties est un tableau)

Le code est lancé par cette fonction: (dont je ne met que le début)
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à
			}
                 }
Jusque là, il s'execute normalement, la fonction Addlib y est appellée corectement.

Voici la suite de la fonction:
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
}
ici, il plante sur Addlib

En voici donc la déclaration:
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
	}
}
à la premiere execution, tout se passe bien à la seconde execution, il plante sur Dellib (lib);

voici donc le code de cette fonction:
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;
 
 
 
}
De même, l'execution de cette fonction est impeccable au premier passage et plante au second sur le 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)...

si vous avez une idée...

Merci d'avance et désolé pour vos cheveux