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