メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C++:2023 Rule 8.7.2

Subtraction between pointers shall only be applied to pointers that address elements of the same array

R2024b 以降

説明

ルール定義

Subtraction between pointers shall only be applied to pointers that address elements of the same array 1

根拠

同じ配列内の要素を指す 2 つのポインター間で減算を行う場合、結果は 2 つの配列要素間の距離になります。ポインターが null または異なる配列の要素を指している場合、減算演算は未定義です。減算結果をバッファー インデックスとして使用する場合、バッファー オーバーフローが発生する可能性があります。

配列要素を指すポインター間で減算を行う前に、それらのポインターが非 null であり同じ配列を指していることをチェックします。

Polyspace 実装

Polyspace® は、異なる配列内の要素を指すポインター間の減算にフラグを設定します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

void foo(){
	int a[10];
	int b[10];
	int distance = a-b;//Noncompliant
	
}

この例では、Polyspace が、それぞれ異なる配列の要素である ab の間での減算にフラグを設定します。

チェック情報

グループ: Expressions
カテゴリ: Required

バージョン履歴

R2024b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.