Перекрытие памяти между левой и правой сторонами назначения
Этот дефект возникает при перекрытии памяти между левой и правой сторонами назначения. Например, переменная назначается самому себе или одному члену объединения назначается другой.
Если левая и правая стороны назначения имеют перекрытие памяти, поведение является избыточным или неопределенным. Например:
Самостоятельное присвоение, например 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++ |
| По умолчанию: Откл. |
Синтаксис командной строки: OVERLAPPING_ASSIGN |
| Воздействие: Низкий |
| ИДЕНТИФИКАТОР CWE: 665 |