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 ...
}