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 :
Comportement C 14 :
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!