C and C++


LANG.STRUCT.SUP : Subtraction of Unrelated Pointers

要旨

Pointer subtraction is performed between pointers to different objects.

Pointer subtraction should only be performed between pointers that point at different elements of the same array. Subtracting pointers that point at different variables or allocations is undefined behavior according to the C and C++ standards.

プロパティ

クラス名 Subtraction of Unrelated Pointers
日本語クラス名 Subtraction of Unrelated Pointers
クラス分類 信頼性 (reliability)
ニーモニック LANG.STRUCT.SUP
カテゴリー
MisraC2023 MisraC2023:18.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array
Misra2012 Misra2012:18.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array
Misra2004 Misra2004:17.2 Pointer subtraction shall only be applied to pointers that address elements of the same array
  Misra2004:17.4 Array indexing shall be the only allowed form of pointer arithmetic
AUTOSARC++14 AUTOSARC++14:M5-0-15 Array indexing shall be the only form of pointer arithmetic.
  AUTOSARC++14:M5-0-17 Subtraction between pointers shall only be applied to pointers that address elements of the same array.
MisraC++2008 MisraC++2008:5-0-15 Array indexing shall be the only form of pointer arithmetic.
  MisraC++2008:5-0-17 Subtraction between pointers shall only be applied to pointers that address elements of the same array.
MisraC++2023 MisraC++2023:8.7.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array
CWE CWE:469 Use of Pointer Subtraction to Determine Size
TS17961 TS17961:5.35-ptrobj 5.35. Subtracting or comparing two pointers that do not refer to the same array
CERT-C CERT-C:ARR36-C Do not subtract or compare two pointers that do not refer to the same array
  CERT-C:EXP08-C Ensure pointer arithmetic is used correctly
CERT-CPP CERT-CPP:CTR54-CPP Do not subtract iterators that do not refer to the same container
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Subtraction of Unrelated Pointers"

int f()
{
    int i, j;
    return (int)(&i - &j); /* 'Subtraction of Unrelated Pointers' warning issued here */
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。