Maison > développement back-end > C++ > Qu'arrive-t-il aux pointeurs référençant le même objet après la suppression d'un objet en C ?

Qu'arrive-t-il aux pointeurs référençant le même objet après la suppression d'un objet en C ?

Susan Sarandon
Libérer: 2024-11-01 11:29:30
original
909 Les gens l'ont consulté

What Happens to Pointers Referencing the Same Object After One is Deleted in C  ?

Pointeurs vers la mémoire libérée en C

Après la suppression d'un pointeur, une confusion surgit quant à la validité d'autres pointeurs faisant référence au même objet. Cet article vise à clarifier ce comportement en C.

Considérez le code suivant :

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

delete a;

A* c = a; // Illegal (C++11)
A* d = b; // Debatable legality

// Points to deallocated memory, Undefined in C++11
A* aAddr = &a;</code>
Copier après la connexion

C 11 Behavior :

  • Assigning vers c à partir du pointeur a précédemment supprimé provoque un comportement indéfini puisque a est désormais une valeur de pointeur invalide.
  • Cependant, d pointe vers une copie de a effectuée avant la suppression. Bien que la lecture de la valeur de b pointe vers un emplacement mémoire désalloué, cette action est définie par l'implémentation.

Comportement C 14 :

  • Attribution à c et d à partir du pointeur invalide a provoquent toujours un comportement indéfini.
  • Copier la valeur d'un pointeur invalide, comme cela est fait ici avec b, est également un comportement défini par l'implémentation.

Selon la norme C 11, l'utilisation d'une valeur de pointeur non valide (y compris sa copie) entraîne un comportement indéfini. En C 14, de telles opérations ont un comportement défini par l'implémentation, ce qui signifie que le comportement peut varier selon les différents compilateurs et systèmes d'exploitation.

Par conséquent, en C 11 et en C 14, il est essentiel d'éviter d'utiliser des pointeurs qui ont été supprimé ou faire référence à la mémoire désallouée. Cela peut conduire à un comportement imprévisible et potentiellement erroné.

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!

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