"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'utilisation d'un pointeur après la suppression de l'objet vers lequel il pointe en C++ est-elle légale ?

L'utilisation d'un pointeur après la suppression de l'objet vers lequel il pointe en C++ est-elle légale ?

Publié le 2024-11-10
Parcourir:383

Is Using a Pointer After Deleting the Object It Points to in C   Legal?

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 :

A* a = new A();
A* b = a;

delete a;

A* c = a; // illegal in C  11
A* d = b; // is it legal?

Comprendre la validité du pointeur après suppression

Selon le standard 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 la suppression de 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3