Перекрытие памяти между левой и правой сторонами назначения
Этот дефект возникает, когда происходит перекрытие памяти между левой и правой сторонами назначения. Например, переменная назначается сама себе или один представитель объединения назначается другому.
Если левая и правая стороны назначения имеют перекрытие памяти, поведение является избыточным или неопределенным. Для образца:
Самостоятельное назначение, такое как 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 |