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