2016-01-17 2 views
1

Je ne comprends vraiment pas pourquoi j'ai une telle erreur sachant que tmp et key sont le même type et la taille.Affectation rend entier de pointeur sans un cast [-Wint-conversion

uint8_t key[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; 

void change() { 

    int i; 
    uint8_t *tmp[8]; 

    for(i=0; i<8; i++){ 
     tmp[i] = key[(i+3)%8]; 
    } 
} 

Ce produit:

avertissement: assignation fait pointeur en entier sans cast [-Wint conversion

Répondre

2

tmp et key sont le même type

NO. Ils ne sont pas. Ils sont tous les deux des tableaux, mais le type de données est différent. L'un est un tableau uint8_t *, un autre est un tableau uint8_t.

changement

uint8_t *tmp[8]; 

à

uint8_t tmp[8] = {0}; 
+0

et la raison de la rétrogradation? –

+1

Il n'a pas été mon downvote, mais je ne vois pas où son code utilise un pointeur de 'tmp' non initialisée. Il * attribue * au 'i'th item de' tmp', sans le déréférencer. Ce comportement n'est pas indéfini à attribuer à un pointeur non initialisé. –

+0

@CodyGray Vous avez raison monsieur, j'ai également été confus par les types de données .... Merci de le signaler. Mais alors, en ce qui concerne le DV, c'était avant que j'ajoute cette partie, comme un montage ..... alors, .... :( –

1

pas clairement ce que vous voulez ici, mais si vous voulez tmp[x] pour refléter la valeur key[y] puis

tmp[i] = &key[(i+3)%8]; /* tmp[i] now points at key[ (i+3)%8]; 
// key[3] = 5; /* These two lines modify the same memory */ 
// (*tmp[0]) = 5; /*          */ 

Sinon, si vous voulez tmp être séparé, alors ...

uint8_t tmp[8]; /* change type to be non-pointer. */