Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-11-01 11:29:30758parcourir

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>

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:
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