Howto génération de bugs - épisode 3
Petit exemple de code qui ne fait pas ce pourquoi il a été écrit
[cpp]
void MoveCharacter(Character& character, bool slowly)
{
...
// Check we can move (to go not too fast)
while (character.CanStillMoveRL(walking_pause) && ComputeHeightMovement (character, height, true));
{
// Move !
Game::GetInstance()->character_already_chosen = true;
// Eventually moves the character
character.SetXY( Point2i(character.GetX() +character.GetDirection(),
character.GetY() +height) );
// If no collision, let gravity do its job
character.UpdatePosition();
}
...
}
Le bug se situe ici dans le ; à la fin du while
. La suite est alors considérée comme un bloc indépendant qui sera exécuté 1 seul fois et systématiquement à chaque fois que la fonction MoveCharacter()
est appelée, ignorant complètement le résultat du test du while
…
PS: ce code a été écrit et modifié pour http://www.wormux.org Wormux. Je me suis bien pris la tête à chercher cette erreur bête (dont je suis l’auteur)!