Bonjour,
j'ai une méthode qui retourne un int (code ci-dessous):chercher une couleur dans une main de cartes, une main comprenant en membre un tableau de carte:m_main, une carte ayant deux int membre: l'un contient la couleur, l'autre la valeur de la carte.
Sous Visual C++ express, a l'exécution j'ai un "Run-Time Check Failure #2 - Stack around the variable 'nbredecouleur' was corrupted." lorsque le return 0; est exécuté. Mais si je fais continuer, le programme fonctionne comme prévu.
Je ne comprend pas pourquoi, sachant qu'après l'avoir lancé en pas à pas et regardé attentivement, jamais l'indice de nbredecouleur n'a été dépassé.
Alors est-ce que c'est mal d'allouer statiquement un tableau dans une méthode(car a priori c'est au niveau de la libération du tableau que ça pose problème)
Voilà,
merci
Le code:
int Unemain::ReturnBestCard()
{
if(m_nombre>5) //m_nombre est membre de la class
{
//premiere phase: on comtpe pour voir si la couleur tombe
int nbredecouleur[5]; //lindice 0 sert a rien, le 1 pour le pic, le 2 pour le trefle,le 3 coeur, 4 carreau
int couleurMax=0;//int qui contient le int de la couleur réalisée, on linitilaise a 0
int valeurMax;
//Init a 0 de nbredecoul
for (int i=1;i<=4;i++)
{
nbredecouleur[i]=0;
}
//on recense les couleurs
for (int i=0;i<m_nombre;i++)
{
(nbredecouleur[m_main[i].GetCouleur()])+=1;//on augemnt de un la couleur correspodnante
}
//Il y en a qu'une seule fatalement qui est supérieur/egale à 5 donc c'ets la bonne dans ce cas
for (int i=1;i<=4;i++)
{
if (nbredecouleur[i]>=5) {couleurMax=i;} //si on a une couleur alors c'ets uen couleur de couleurMax
}
//Deuxième phase: déterminer la carte la plus haute
if (couleurMax!=0) //si on a effectivement une couleur
{
int rang=m_nombre;
while((m_main[rang].GetCouleur())!= couleurMax)
{
rang--;
}
valeurMax=m_main[rang].GetValeur();
cout<<"debug: couleur de "<<couleurMax<<" a "<<valeurMax<<endl;
}
}
return 0;
}