Aracılığıyla paylaş


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