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