C6268C6268

avertissement C6268 : ordre des opérations Incorrect : (<TYPE1 >) (<TYPE2 >) x + y.warning C6268: Incorrect order of operations: (<TYPE1>)(<TYPE2>)x + y. Les parenthèses manquantes possibles dans (<TYPE1 >) ((<TYPE2 >) x + y)Possible missing parentheses in (<TYPE1>)((<TYPE2>)x + y)

Cet avertissement indique qu’une expression de cast complexe peut impliquer un problème de priorité lors de l’exécution d’opération arithmétique de pointeur.This warning indicates that a complex cast expression might involve a precedence problem when performing pointer arithmetic. Étant donné que les casts sont regroupés plus étroitement que les opérateurs binaires, le résultat peut-être pas ce que prévu par le programmeur.Because casts group more closely than binary operators, the result might not be what the programmer intended. Dans certains cas, ce défaut provoque un comportement incorrect ou un blocage du programme.In some cases, this defect causes incorrect behavior or a program crash.

Dans une expression telle que :In an expression such as:

(char *)p + offset

le décalage est interprété comme un offset dans les caractères ; Toutefois, une expression telle que :the offset is interpreted as an offset in characters; however, an expression such as:

(int *)(char *)p + offset

équivaut à :is equivalent to:

((int *)(char *)p) + offset

et, par conséquent, le décalage est interprété comme un offset dans les entiers.and so the offset is interpreted as an offset in integers. En d’autres termes, elle est équivalente à :In other words, it is equivalent to:

(int *)((char *)p + (offset * sizeof(int)))

qui n’est pas susceptible d’être ce que prévu par le programmeur.which is not likely to be what the programmer intended.

Selon les tailles relatives des deux types, cela peut entraîner un dépassement de mémoire tampon.Depending on the relative sizes of the two types, this can lead to a buffer overrun.

ExempleExample

Le code suivant génère cet avertissement :The following code generates this warning:

void f(int *p, int offset_in_bytes)  
{  
    int *ptr;  
    ptr = (int *)(char *)p + offset_in_bytes;  
    // code ...  
}  

Pour corriger cet avertissement, utilisez le code suivant :To correct this warning, use the following code:

void f(int *p, int offset_in_bytes)  
{  
    int *ptr;  
    ptr = (int *)((char *)p + offset_in_bytes);  
    // code ...  
}