Перекрытие памяти между левой и правой сторонами назначения
Этот дефект возникает, когда происходит перекрытие памяти между левой и правой сторонами назначения. Например, переменная назначается сама себе или один представитель объединения назначается другому.
Если левая и правая стороны назначения имеют перекрытие памяти, поведение является избыточным или неопределенным. Для образца:
Самостоятельное назначение, такое как x=(int)(long)x;
является избыточным, если только x
является volatile
-квалифицированный.
Назначение одного представителя объединения другому приводит к неопределенному поведению.
Например, в следующем коде:
Результат задания u1.a = u1.b
не определен, потому что u1.b
не инициализирован.
Результат задания u2.b = u2.a
зависит от выравнивания и конечности реализации. Это не определяется стандартами C.
union { char a; int b; }u1={'a'}, u2={'a'}; //'u1.a' and 'u2.a' are initialized u1.a = u1.b; u2.b = u2.a;
Избегайте назначения между двумя переменными, которые имеют перекрывающуюся память.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: OVERLAPPING_ASSIGN |
Влияние: Низкое |
ИДЕНТИФИКАТОР CWE: 665 |