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 indéfini en C/C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 02:34:27932parcourir

## Is Storing an Invalid Pointer Always Undefined Behavior in 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!

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