Erreur à la compilation : "Size unknown" [Résolu]

Signaler
Messages postés
28
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
27 septembre 2007
-
Messages postés
28
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
27 septembre 2007
-
Les types decode ci dessous provoque tous la même erreur : 'void *' unknown size

Je comprends pas pourquoi et encore moins comment y remédier...
Qqun pourrait m'aider svp ? Merci d'avance

_1er expl :

LPVOID lpPtr = 3;

lpPtr += 2; ----> erreur

_2nd expl :

LPVOID lpPtr1 = 3;
LPVOID lpPtr2 = 2;

lpPtr1 = lpPtr2; ------> pas d'erreur
lpPtr1 += lpPtr2; -----> erreur
lpPtr1 = lpPtr2 + 3 --------> erreur

3 réponses

Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Effectivement:

char *pc;
pc++; registre d'adresse avance de 1 octet = sizeof(char)

float *pf;
pf++; registre d'adresse avance de 4 octet = sizeof(float)

D3DXVECTOR3 *pv3;
pv3++; registre d'adresse avance de 12 octet = 3*sizeof(float)

Donc le pointeur doit être typé pour pouvoir être incrémenté.


void *pv;
pv++; erreur
((BYTE*)pv)++; doit marché car pv est casté en BYTE* qui est par définition typé
Messages postés
106
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
11 février 2008

C'est de l'arythmetique de pointeurs.

Il faut bien comprendre que lpPtr contient la valeur d'une adresse memoire.
Le compilateur doit connaitre la taille en octets de l'entité dont l'adresse est manipulée par ton pointeur.
Exemple :

int a[3];
int *lpPtr = &a; // & pour "adresse de ..."
// evite de mettre des valeurs arbitraires dans les pointeurs sinon tu risque d'avoir de drole de surprises !!
lpPtr +2; // ici *lpPtr a[2];

Si ton pointeur est generique (void *) tu ne peut pas effectuer d'operations dessus.

voila a+
Messages postés
28
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
27 septembre 2007

merci à ts les deux