次の方法で共有


警告 C6268

操作の順序が正しくありません: ('TYPE1')('TYPE2')x + y。 ('TYPE1')(('TYPE2')x + y) にかっこが見つからない可能性があります

この警告は、ポインター演算を実行するときに、複雑なキャスト式に優先順位の問題が含まれる可能性があることを示します。 キャストはバイナリ演算子よりも厳密にグループ化されるため、結果はプログラマが意図したものではない可能性があります。 この不具合によって、不適切な動作やプログラムのクラッシュが発生することがあります。

解説

次のような式があるとします。

(char *)p + offset

オフセットは、文字のオフセットとして解釈されます。ただし、次のような式があります。

(int *)(char *)p + offset

は以下に匹敵します。

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

オフセットは、整数のオフセットとして解釈されます。 言い換えると、これは次のようになります。

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

これはプログラマが意図したものではない可能性があります。

2 種類の相対サイズによっては、このオフセットによってバッファー オーバーランが発生する可能性があります。

コード分析名: MISPARENTHESIZED_CASTS

この警告が発生するコード例を次に示します。

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

この警告を解決するには、次のコードを使用します。

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