J'ai eu cette idée avec certaines personnes en disant que C hors limites, les pointeurs de provoquer un comportement non défini, même s'ils ne sont pas être déréférencé. exemple:
int a;
int *p = &a;
p = p - 1;
la troisième ligne ici va provoquer un comportement non défini même si p
n'est jamais déréférencé (*p
n'est jamais utilisé).
À mon avis, il semble illogique que C serait de vérifier si un pointeur est lié sans le pointeur utilisé (c'est comme quelqu'un serait d'inspecter les gens dans la rue pour voir si ils sont munis de fusils dans le cas où ils entrer dans sa maison. Là où l'idéal chose à faire est d'inspecter les gens quand ils sont sur le point d'entrer dans la maison). Je pense que si C vérifie que beaucoup de gestion d'exécution se produit.
De Plus, si C vraiment vérifier pour OOB pointeurs alors pourquoi cela ne cause pas de UB:
int *p; // uninitialized thus pointing to a random adress
dans ce cas, pourquoi rien ne se passe, même si le risque de p
pointant vers un OOB adresse est élevé.
AJOUTER:
int a;
int *p = &a;
p = p - 1;
dire &a
est de 1000. La valeur de p
après l'évaluation de la troisième ligne:
-
996 mais encore un comportement indéfini, car
p
pourrait être déréférencés quelque part et d'autre cause que le véritable problème. - valeur indéfinie et c'est un comportement indéfini.
parce que je pense que "le troisième ligne a été appelé à être de comportement indéfini" en premier lieu en raison de la possibilité d'utiliser à l'avenir que des OOB (pointeur déréférencé) et les gens, au fil du temps, pris comme un comportement indéfini dans son propre. Maintenant, c'est la valeur de p
100% 996 et qui restent encore à définir le comportement ou sa valeur ne sera pas défini?