PourquoiC initialisation d'un tableau
static char *opcode_str[] = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
travail, mais
static char **opcode_str = { "DATA"
, "DATA_REQUEST_ACK"
, "ACK_TIMER_EXPIRED"
, "ACK_UNEXPECTED_SEQ"
, "ACK_AS_REQUESTED"
} ;
échoue avec SEGV lorsque opcode_str [0] est printf'd?
Je pense que c'est parce que la deuxième liste n'a pas alloué de mémoire pour le tableau de cinq éléments de pointeurs, mais j'ai besoin d'une explication plus complète.
Tout le meilleur,
Chris.
Merci. Pourquoi n'échoue-t-il pas au moment de la compilation ou lorsque le pointeur est initialisé? – fadedbee
@chrisdew il est un comportement indéfini pour violer une règle sémantique en C. La règle que vous violez est * L'initialiseur pour un scalaire doit être une seule expression, facultativement entourée d'accolades. * Cependant, vous avez plusieurs expressions entre accolades. –
Voilà, je laisserais l'avertissement défiler sur mon écran. Doh! Je peux maintenant voir que j'ai mis le pointeur char ** à la valeur du pointeur char * sur "DATA". "DATA" a ensuite été évalué comme si ces quatre octets contenaient un pointeur, ce qui a provoqué le segfault. – fadedbee