Partilhar via


C6268

Aviso C6268: Ordem incorreta de operações: (<type1>) (<type2>) x + y.Possíveis parênteses faltando na (<type1>) ((<type2>) x + y)

Este aviso indica que uma expressão de conversão complexo pode envolver um problema de precedência ao realizar aritmética de ponteiro.Porque conversões de agrupar mais de perto de operadores binário, o resultado não poderá ser o que o programador pretendia.Em alguns casos, esse defeito causa um comportamento incorreto ou uma falhar do programa.

Em uma expressão, sistema autônomo:

(char *)p + offset

o deslocamento é interpretado sistema autônomo um deslocamento de caracteres; no entanto, uma expressão sistema autônomo:

(int *)(char *)p + offset

equivale ao:

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

e, portanto, o deslocamento é interpretado sistema autônomo um deslocamento em números inteiros.Em outras palavras, é equivalente à:

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

que não provavelmente seja o que o programador pretendia.

Dependendo dos tamanhos relativos dos dois tipos, isso pode levar a uma saturação de buffer.

Exemplo

O código a seguir gera este aviso:

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

Para corrigir esse aviso, use o seguinte código:

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