Maison > développement back-end > C++ > Qu'arrive-t-il aux pointeurs copiés en C une fois l'original supprimé ?

Qu'arrive-t-il aux pointeurs copiés en C une fois l'original supprimé ?

DDD
Libérer: 2024-11-01 15:13:02
original
370 Les gens l'ont consulté

What Happens to Copied Pointers in C   After the Original is Deleted?

Pointeurs en C après suppression

Considérez l'extrait de code suivant en C :

<code class="cpp">A* a = new A();
A* b = a;
delete a;
A* c = a; // Undefined behavior in C++11
A* d = b; // Potentially legal, but uncertain</code>
Copier après la connexion

Ce code lève le question : que se passe-t-il lors de l'accès à la valeur d'un pointeur copié après la suppression du pointeur d'origine ?

En C 11, accéder à la valeur d'un pointeur qui a été supprimé entraîne un comportement indéfini. Cela s'applique aux deux pointeurs a et b. Copier la valeur de a dans c n'est pas non plus défini, car a indique une mémoire désallouée.

Cependant, en C 14, le comportement devient défini par l'implémentation. La norme précise que :

"L'indirection via une valeur de pointeur non valide et le passage d'une valeur de pointeur non valide à une fonction de désallocation ont un comportement non défini. Toute autre utilisation d'une valeur de pointeur non valide a un comportement défini par l'implémentation."

Par conséquent, en C 14, l'accès à la valeur de b, qui est une copie de a, est également défini par l'implémentation. Cela pourrait potentiellement conduire à un comportement indéfini, mais cela peut également être géré différemment par des implémentations spécifiques.

En résumé, A* c = a; et A* d = b; ne sont pas définis en C 11 et définis par l'implémentation en C 14. En effet, les deux pointeurs a et b pointent vers une mémoire invalide après l'opération de suppression.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal