Maison >développement back-end >C++ >## Le stockage d'un pointeur invalide a-t-il toujours un comportement indéfini en C/C ?
Le stockage d'un pointeur invalide a-t-il toujours un comportement non défini ?
En C et C, le déréférencement d'un pointeur invalide entraîne un comportement indéfini. Cependant, une question se pose : le simple fait de stocker une adresse mémoire invalide dans une variable de pointeur constitue-t-il un comportement indéfini ?
Considérez le code suivant :
<code class="c">const char* str = "abcdef"; const char* begin = str; if (begin - 1 < str) { /* ... do something ... */ }</code>
Ici, l'expression start - 1 est évaluée à une adresse mémoire invalide. Bien que nous nous abstenions de le déréférencer, nous l’utilisons dans l’arithmétique des pointeurs pour déterminer sa validité. Alors, cette opération entraîne-t-elle un comportement indéfini, étant donné que certaines architectures peuvent déclencher une erreur de bus lors du chargement d'un pointeur invalide dans un registre ?
La réponse à cette question se situe dans le standard C ou C. Selon le C Draft Standard, stocker un pointeur invalide est en effet un comportement indéfini. La section 6.5.6/8 de la norme définit l'arithmétique du pointeur, mais elle ne couvre pas explicitement le cas où l'opérande pointe vers une adresse mémoire invalide.
Par conséquent, par omission, la norme C laisse ce cas non spécifié, ce qui en fait un comportement indéfini. Par conséquent, stocker un pointeur invalide dans une variable de pointeur, même s'il n'est pas déréférencé, est considéré comme un comportement non défini en C et C selon la norme actuelle.
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!