
Envoyé par
bird12358
merci de ta reponse mais ca me fait tjrs les meme erreur
mem.c:23: attention : dereferencing «void *" pointer
mem.c:23: attention : dereferencing «void *" pointer
mem.c:23: erreur: utilisation invalide d'expression void
mem.c:32: attention : dereferencing «void *" pointer
mem.c:32: attention : dereferencing «void *" pointer
mem.c:32: erreur: utilisation invalide d'expression void
make: *** [mem] Erreur 1
Oui évidemment. J'aurais pu le remarquer (j'ai pas de compilo, je corrige juste à la lecture)
Etant donné que tu travailles avec des pointeurs void * donc des pointeurs universels, les éléments dest[i] sont de type "void" et ne sont pas manipulables. Le compilo ne sait pas que tu veux manipuler ici des octets. D'ailleurs l'opération[i] implique un déplacement d'éléments mais comme le compilo ne connait pas l'élément lui-même, il sait évidemment pas de combien d'octets faut décaler en mémoire pour atteindre l'élément [i].
Rappel de l'arithmétique des pointeurs: tab[i] => déplacement de i * sizeof(*tab) octets
Chaque fois que tu travailles sur var[i], vaut d'abord caster var en char * pour que var[i] soit vu comme char
((char*)dest)[i]=((char*)source)[i];
Ou alors tu utilises deux pointeurs de type char qui partent de source et dest et qui s'incrémentent (ou qui décrémentent selon le cas)
Partager