C6268C6268

ADVERTENCIA C6268: orden incorrecto de las operaciones: (<TIPO1 >) (<TIPO2 >) x + y.warning C6268: Incorrect order of operations: (<TYPE1>)(<TYPE2>)x + y. Posibles paréntesis ausentes en (<TYPE1 >) ((<TIPO2 >) x + y)Possible missing parentheses in (<TYPE1>)((<TYPE2>)x + y)

Esta advertencia indica que una expresión de conversión compleja podría implicar un problema de precedencia al realizar la aritmética de punteros.This warning indicates that a complex cast expression might involve a precedence problem when performing pointer arithmetic. Dado que el grupo de conversiones es más estrecho que los operadores binarios, el resultado podría no ser el previsto por el programador.Because casts group more closely than binary operators, the result might not be what the programmer intended. En algunos casos, este defecto provoca un comportamiento incorrecto o un bloqueo del programa.In some cases, this defect causes incorrect behavior or a program crash.

En una expresión como:In an expression such as:

(char *)p + offset

el desplazamiento se interpreta como un desplazamiento en caracteres; sin embargo, una expresión como:the offset is interpreted as an offset in characters; however, an expression such as:

(int *)(char *)p + offset

equivale a:is equivalent to:

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

y, por tanto, el desplazamiento se interpreta como un desplazamiento en enteros.and so the offset is interpreted as an offset in integers. En otras palabras, es equivalente a:In other words, it is equivalent to:

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

que no es probable que sea el objetivo del programador.which is not likely to be what the programmer intended.

Dependiendo de los tamaños relativos de los dos tipos, esto puede provocar una saturación del búfer.Depending on the relative sizes of the two types, this can lead to a buffer overrun.

EjemploExample

El código siguiente genera esta advertencia:The following code generates this warning:

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

Para corregir esta advertencia, utilice el código siguiente: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 ...
}