このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C++:2008 Rule 7-5-1
A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function.
説明
ルール定義
A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function. 1
根拠
関数のローカル オブジェクトは、関数呼び出しの最後に破棄されます。このようなオブジェクトのアドレスをポインターを介して返すと、破棄されたオブジェクトにアクセスする可能性があります。次に例を示します。
int* foo(int a){ int b = a^2; return &b; }
foo()
は、b
へのポインターを返します。変数 b
が関数呼び出しの最後でスコープから外れ、foo()
から返されるポインターが破棄されたオブジェクトを指します。このポインターにアクセスすると、未定義の動作につながります。Polyspace 実装
関数呼び出しの最後でスコープから外れる変数への参照またはポインターを関数が返す場合に、Polyspace® は違反を報告します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
グループ: Declarations |
カテゴリ: 必要 |
バージョン履歴
R2013b で導入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.