Un tableau statique dans une méthode: c'est mal?

Résolu
harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007 - 21 avril 2007 à 19:56
harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007 - 22 avril 2007 à 00:11
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;
}

2 réponses

harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007
22 avril 2007 à 00:11
Oula, shame on me
Après une journée de recheche entière(oui ca m'obsédais ce truc), des incantations, des tentatives pour comprendre comment se passe la libération des variables en fin de fonction... il se trouve que dans mon main j'ai initialisé à >4 une couleur(fautte de frappe), le m_main[i].GetCouleur() retournait 7, et mon tableau de taille 4 aime pas qu'on demande la 7 eme position.....

Voilà, comment perdre une journée ensolleillée :'(
3
harddisk Messages postés 54 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 13 mai 2007
21 avril 2007 à 19:59
J'ai oublié comment(et si c'est possible) éditer, mais je rajoute que ce code marche très bien(sans erreur de stack) si au lieu de le mettre dans une méthode, je le met dans une fonction "normale"(en passant les variables qu'il faut).
0
Rejoignez-nous