Sujets-libres.fr

Informatique, logiciels libres, internet, humeurs et… le reste !

Bug ICC #1

Rédigé par -Fred- Aucun commentaire
ICC, pour ceux qui se posent la question, est l'acronyme de "interface chaise clavier". Cette interface peut faire l'objet de bugs divers et variés. C'est d'ailleurs la plus importante source d'erreur dans le monde informatique. Il m'a donc semblé naturel d'écrire sur ce sujet de temps en temps. Les bugs ICC dont je parlerai sont majoritairement les miens. Les écrire me permettra je l'espère de ne pas les reproduire trop vite...

Pour commencer, voici ce qui m'est arrivé aujourd'hui :
L'application sur laquelle je travaille en ce moment (résolveur de cube) est codée en partie en C++. Ceci dit, dans l'une de mes classes, j'utilise 3 petits tableaux. La solution fera certainement hurler les puristes mais elle fonctionne et répond parfaitement à mon besoin. Les voici avec leur interfaces privées (pour les deux dernier tableaux) :

[...]
private:
[...]
void setFacePince(int numPince, QString face);
QString getFacePince(int numPince);
void initReferenceRotationCube();
QString getReferenceRotationCube(int y, int x);
[...]
int modele[3][3][6]; // [x][y][RBLFUD] ; Modèle représentant le cube et utilisé de trouver l'algo de résolution
QString facePince[2]; // [0] -> pince A ; [1] -> pince B ; valeurs parmi [RBLFUD]
QString referenceRotationCube[6][6]; // Tableau deux dimensions à initialiser au début permettant de mémoriser la liste des faces accessible à une pince si rotation du cube par l'autre pince
[...]

Bon, rien de particulier à priori. L'une de mes fonctions utilise les valeurs du tableau referenceRotationCube une fois qu'il est initialisé.
C'est là que je me suis rendu compte que ça ne fonctionnait pas correctement du tout (sans rentrer dans les détails, je trouve des valeurs que je ne devrais théoriquement pas obtenir). J'ai donc passé la fonction en question au peigne fin pour comprendre ce qui se passait. Je suis arrivé à la conclusion que les valeurs de mon tableau referenceRotationCube n'étaient pas identiques à celles que j'avais prévu lors de l'init du tableau. En fait, seule la valeur referenceRotationCube[0][0] était modifiée. A aucun moment je ne viens modifier cette valeur précise dans l'application.

J'ai perdu trois bonnes heures sur ce problème avant de me rendre compte que mon problème venait en fait de ma fonction "void setFacePince(int numPince, QString face)". Le résolveur de cube dispose de deux pinces que je nomme, par commodité, 1 et 2. Lorsque j'ai utilisé la fonction setFacePince, j'ai continué à repérer mes pinces par les numéros 1 et 2, alors que le tableau facePince[] n'accepte que les valeurs 0 et 1 pour accéder à ce tableau.

Résultat, setFacePince(2, "D") avait pour effet d'écrire la valeur "D" ailleurs que dans le tableau, c'est à dire dans referenceRotationCube[0][0].

Promis, j'essayerai de ne pas le refaire :p .

Écrire un commentaire

Quelle est la première lettre du mot dfaao ?

Fil RSS des commentaires de cet article