Freigeben über


Warnung C6268

Falsche Reihenfolge der Vorgänge: ('TYPE1')('TYPE2')x + y. Mögliche fehlende Klammern in ('TYPE1')('TYPE2')x + y)

Diese Warnung gibt an, dass ein komplexer Cast-Ausdruck bei der Ausführung von Zeigerarithmetik zu einem Rangfolgeproblem führen könnte. Da die Gruppe stärker gruppiert wird als binäre Operatoren, ist das Ergebnis möglicherweise nicht das, was der Programmierer beabsichtigt hat. In einigen Fällen verursacht dieser Fehler ein falsches Verhalten oder einen Programmabsturz.

Hinweise

In einem Ausdruck wie:

(char *)p + offset

der Offset als Offset in Zeichen interpretiert wird; ein Ausdruck, z. B.:

(int *)(char *)p + offset

entspricht:

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

daher wird der Offset als Offset in ganzzahligen Zahlen interpretiert. Mit anderen Worten:

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

das ist wahrscheinlich nicht, was der Programmierer beabsichtigt hat.

Abhängig von den relativen Größen der beiden Typen kann dieser Offset zu einem Pufferüberlauf führen.

Codeanalysename: MISPARENTHESIZED_CASTS

Beispiel

Der folgende Code generiert diese Warnung:

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

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

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