MISRA C:2023 Rule 18.6
The address of an object with automatic or thread-local storage shall not be copied to another object that persists after the first object has ceased to exist
R2024a 以降
説明
ルール定義
The address of an object with automatic storage or thread-local shall not be copied to another object that persists after the first object has ceased to exist 1 .
根拠
オブジェクトのアドレスはオブジェクトの有効期間が切れたときに確定できなくなります。確定できないアドレスの使用は未定義の動作になります。
Polyspace 実装
ローカル変数またはスレッド ローカル変数を指すポインターが変数のスコープをエスケープする場合、Polyspace® はこのルールの違反を報告します。次に例を示します。
関数が、ローカル変数を指すポインターを返す。
関数が代入
globPtr = &locVarを実行する。globPtrはグローバル ポインター変数、locVarはローカル変数です。関数が代入
*paramPtr = &locVarを実行する。paramPtrは関数パラメーター (つまりint**ポインターなど)、locVarはローカルのint変数です。スレッド ローカル変数のアドレスは、グローバル ポインターに代入されます。
Polyspace はこのルールを、関数 alloca を使用して割り当てられるメモリに対して適用し、静的ローカル変数は無視します。Polyspace は、関数定義に含まれるローカル オブジェクトは同じスコープ内にあると仮定します。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: ポインターと配列 |
| カテゴリ: 必要 |
| AGC カテゴリ: 必要 |
バージョン履歴
R2024a で導入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.