C6268
C6268 Uyarı: Hatalı işlem sırası: (<TYPE1>)(<TYPE2>) x + y.Olası eksik parantez içinde (<TYPE1>) ((<TYPE2>) x + y)
Bu uyarı, işaretçiyi aritmetik işlemi yaparken karmaşık atama ifadesi öncelikli sorun ilgili olduğunu gösterir.Yayınları ikili işleçler daha yakından gruplandırmak için sonuç ne Programcı amaçlanan olmayabilir.Bazı durumlarda, bu hata, yanlış davranış veya programın çökmesine neden olur.
Gibi bir ifade içinde:
(char *)p + offset
Uzaklık uzaklığı karakter olarak yorumlanır. Ancak, gibi bir ifade:
(int *)(char *)p + offset
eşdeğerdir:
((int *)(char *)p) + offset
ve bu nedenle uzaklık bir uzaklık tamsayılar olarak yorumlanır.Başka bir deyişle, eşdeğeri olan:
(int *)((char *)p + (offset * sizeof(int)))
hangi ne Programcı amaçlar için olası değildir.
Bağlı olarak göreceli boyutları iki bu arabellek taşmasına neden olabilir.
Örnek
Aşağıdaki kod, bu uyarı oluşturur:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
Bu uyarı düzeltmek için şu kodu kullanın:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}