EN JP CN

CWARN.NOEFFECT.SELF_ASSIGN

CWARN.NOEFFECT.SELF_ASSIGN

無効な自己割り当て

CWARN.NOEFFECT.SELF_ASSIGN チェッカーは、変数に対応する式が自身に割り当てられているインスタンスにフラグを立てます。

脆弱性とリスク

自身への割り当ては意味がないため、設計の意図が達成されない可能性があります。自己割り当ては、エラーでなくても、コード内でより大きなエラーを示す場合があります。

脆弱コード例 1

1  class A {
2      int x;
3    public:
4      A() : x(x) {} 
5  };

Klocwork 自己割り当てが発生する 4 行目にフラグを立てます。

修正コード例 1

class A {
    int x;
  public:
    A(int x) : x(x) {} 
};

修正例では、代入式が正しくなっています。

脆弱な修正コード例 2

1  class A {
2      int i;
3      char c;
4      bool b;
5    public:
6      A(int i, char c) {
7        this->i = i;   
8        this->c = c;  
9        this->b = b;  
10     }  
11 };

この例では、Klocwork は、自身への割り当てを示す 9 行目にフラグを立てますが、代入式が正しい 7 行目と 8 行目にはフラグを立てません。