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