Maison > Article > développement back-end > L'utilisation d'un pointeur après la suppression de l'objet vers lequel il pointe en C est-elle légale ?
Pointeurs en C après suppression
En C, la gestion de la mémoire est cruciale, et un aspect clé est la gestion des pointeurs après la suppression d'un objet. Le code suivant soulève des questions sur la validité du pointeur après une suppression :
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // illegal in C++11 A* d = b; // is it legal?</code>
Comprendre la validité du pointeur après suppression
Selon la norme C, référencer le stockage pointé par un pointeur après la suppression de l'objet correspondant n'est pas défini et peut entraîner un comportement imprévisible. Cela s'applique à la fois au pointeur d'origine (a dans ce cas) et aux copies de ce pointeur (b).
En C 11, accéder à la valeur de a ou de b après avoir supprimé a est un comportement indéfini. La norme C 14 clarifie ce comportement, en indiquant que les deux actions ont un comportement défini par l'implémentation. Cela signifie que le résultat dépend de l'implémentation spécifique du compilateur ou de l'environnement d'exécution.
Comportement défini par l'implémentation
Comme mentionné précédemment, C 14 envisage d'utiliser des pointeurs non valides ( y compris les copies des pointeurs supprimés) pour avoir un comportement défini par l'implémentation. Cela signifie que différents compilateurs ou systèmes d'exploitation peuvent gérer ces situations différemment.
Certaines implémentations peuvent générer une erreur d'exécution générée par le système, tandis que d'autres peuvent présenter un comportement imprévisible ou mettre fin au programme. Il est donc essentiel d'éviter d'utiliser des pointeurs faisant référence à des objets supprimés, y compris des copies de ces pointeurs.
Conclusion
En résumé, accéder à la valeur d'un pointeur (ou ses copies) après la suppression de l'objet associé est dangereux et peut conduire à un comportement indéfini ou défini par l'implémentation. Il est crucial de garantir que les pointeurs pointent toujours vers des objets valides et de gérer la gestion de la mémoire de manière appropriée pour éviter de tels problèmes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!