2010-10-04 3 views
0

devrait-elle entraîner un comportement indéfini?La question standard C++

La valeur de pointeur2 doit-elle être NULL?

double *pointer = 0; 
double &value = *pointer; 
double *pointer2 = &value; 
+0

connexes: http://stackoverflow.com/questions/2474018/when-does-invoking-a-member -fonction-sur-une-instance-null-result-dans-undefined-behav – GManNickG

+1

Quel standard C pensez-vous que même le 'double & value' ??? Ce sont des langues différentes avec des normes différentes et des ensembles de fonctionnalités différents. Arrggghhhh !!!!! – dmckee

+0

@dmc mon mauvais, corrigé – Anycorn

Répondre

6

Oui.

double *pointer = 0; // init `pointer` to a NULL pointer value 
double &value = *pointer; // dereference it 

La norme parle spécifiquement à cette situation - de 8.3.2/4 « Références »:

Une référence doit être initialisé à référence à un objet valide ou fonction. [Note: en particulier, une référence nulle ne peut pas exister dans un programme bien défini, car la seule façon de créer une telle référence serait de lier à l ' « objet » obtenu par déréférencement d'un pointeur NULL, provoque un comportement indéfini. Comme décrit en 9.6, une référence ne peut pas être liée directement à un champ de bits. ]

+0

Est-ce important que je ne lis pas/n'écrive pas en mémoire? – Anycorn

+0

@aaa: Pas aussi loin que la norme. – sepp2k

+0

Vous pourriez ne pas avoir un plantage à ce point parce que le compilateur n'essaiera peut-être pas de 'lire' l'emplacement mémoire 0. Cependant, c'est une des natures malheureuses du comportement indéfini - le compilateur n'a pas à agir comme si c'était une erreur. Même ainsi, la définition d'une référence via un déréférencement de pointeur NULL est un comportement indéfini. –

3

Oui, vous déréférencer un pointeur NULL lorsque vous faites *pointer en ligne 2.

Questions connexes