メインコンテンツ

AUTOSAR C++14 Rule M0-2-1

An object shall not be assigned to an overlapping object.

説明

ルール定義

An object shall not be assigned to an overlapping object.

根拠

オブジェクトをメモリがオーバーラップしている別のオブジェクトにコピーする場合、動作は未定義です。

例外は次のとおりです。

  • あるオブジェクトを、メモリが厳密にオーバーラップしており、かつ互換性のある型の別のオブジェクトに代入する。

  • memmove を使用して、あるオブジェクトを別のオブジェクトにコピーする。

トラブルシューティング

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

すべて展開する

void func (void) {
    union {
        short i;
        int j;
    } a = {0}, b = {1};
    
    a.j = a.i;   //Noncompliant
    a = b;       //Compliant
}

この例では、a.ia.j に代入される場合、ルールに違反します。2 つの変数にオーバーラップしているメモリ領域があるためです。

チェック情報

グループ: 言語に依存しない問題
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入

すべて展開する