FAQ C++ moderne et erreurs courantes

Ce ou ces sujets font partie d'une FAQ en cours d'écriture, vos retours sont les bienvenus.
Un pointeur comme une référence pointent sur (resp. fait référence à) un objet existant en mémoire. Mais il peut arriver que cet objet soit détruit tandis que le pointeur ou la référence subsistent et pointe toujours sur (resp. fait toujours référence à) son ancien emplacement mémoire. Et cette zone ainsi libérée peut être utilisée par le programme comme bon lui semble (création de nouvelles variables, nouvelle allocation mémoire…).
Dès lors, si vous continuez à utiliser à travers ce pointeur/cette référence cet emplacement mémoire, vous vous exposez à un comportement indéfini.
De tels pointeur/référence sont appelés « dangling pointer »/« dangling reference ».
(Oui, il n'est pas impossible d'observer un code qui « fonctionne » et vous donne encore les bonnes valeurs qui étaient stockées dans la zone mémoire. Mais cela reste un comportement indéfini. Cette zone mémoire ainsi libérée peut être à tout moment réutilisée pour autre chose. Un moment qui peut arriver de façon complètement aléatoire.)
À voir également