samedi, octobre 31, 2015

Undefined behaviour ...

Adding a few sound samples for Bilou's jumps shouldn't have led the game to crash. Really. It shouldn't have. And yet, it had. And with a flavour of deja-vu ...

I was using the back() of a std::vector while there was nothing pushed yet. And this is undefined behaviour. My C++ skills still need training. It coud explain my un-ability to produce .nds files working on real hardware when building them out of the good-old-directory.


Oh, le vilain bug que nous avons là. Un pointeur négatif ? Alors qu'il devrait provenir d'un vecteur de régions allouées précédemment ?_? Le vrai hardware de la DS n'aime pas du tout ça, bien sûr. Ce désassemblage a un air de déjà-vu, et pourtant, je suis surpris de ne pas avoir trouvé la raison du problème jusqu'ici, tant c'était évident. Enfin, une fois qu'on a pris le temps d'aller lire la doc de vector::back() et qu'on a souligné trois fois en rouge "comportement indéterminé" dans sa tête.

En clair, "comportement indéterminé" signifie que le résultat va dépendre d'autre chose que juste le code que vous avez écrit. Il peut s'agir de l'emplacement précis où le code se trouve, de ce que fopen a mangé ce matin, de l'âge du cache-pitaine ... n'importe quoi. Et donc on peut très bien avoir un nouveau sample dans les effets sonores qui tout à coup fait crasher le jeu.

Vous me pardonnerez le côté auto-flagellation de ce post: j'ai besoin de pouvoir me le rappeler à mon moi-du-futur.

Aucun commentaire: