Maison > développement back-end > C++ > le corps du texte

Qu'arrive-t-il aux pointeurs après la suppression de la mémoire vers laquelle ils pointent en C ?

Mary-Kate Olsen
Libérer: 2024-11-01 01:48:02
original
992 Les gens l'ont consulté

What Happens to Pointers After Deleting the Memory They Point To in C  ?

Comportement des pointeurs en C après suppression

En C , la suppression d'un pointeur libère la mémoire vers laquelle il pointe. Cependant, le comportement des pointeurs pointant vers cette mémoire supprimée devient indéfini ou défini par l'implémentation, selon la version C.

Considérez le code suivant :

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Assuming undefined or implementation-defined in C++11
A* d = b; // Supposed to be legal</code>
Copier après la connexion

Valeur de lecture de Copie du pointeur supprimé (b)

En C 11, lire la valeur de b après la suppression de a est un comportement indéfini. Cependant, en C 14, il est défini par l'implémentation. En effet, le pointeur b lui-même devient une « valeur de pointeur invalide » après la suppression de a.

Comportement défini par l'implémentation

En C 14, en utilisant une valeur de pointeur non valide , y compris sa copie, a un comportement défini par l'implémentation. Cela signifie que le compilateur est autorisé à décider quoi faire dans de tels cas. Dans certaines implémentations, cela peut générer une erreur d'exécution, tandis que dans d'autres, cela peut autoriser l'opération mais entraîner un comportement indéfini lorsque le pointeur est utilisé ultérieurement.

Légal ou non défini ?

Par conséquent, les deux 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. La valeur du pointeur copiée (b) est considérée comme une valeur de pointeur non valide et son utilisation est soumise à la définition de l'implémentation.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!