Операции чтения или записи объекта являются неопределенным поведением
Этот дефект возникает при попытке чтения или записи объекта с временным временем жизни, который возвращается вызовом функции. В структуре или объединении, возвращенном функцией и содержащем массив, представители массива являются временными объектами. Срок жизни временных объектов заканчивается:
Когда полное выражение или полный декларатор, содержащий вызов, заканчивается, как определено в C11 Standard.
После следующей точки последовательности, как определено в C90 и C99 стандартах. Точка последовательности является точкой выполнения программы, где все предыдущие вычисления завершены, и последующая оценка еще не началась.
Для кода С++ объект Accessing с временным временем жизни поднимает дефект только тогда, когда вы записываете в объект с временным временем жизни.
Если временный объект жизни возвращается по адресу, дефект не возникает.
Изменение объектов с временным временем жизни является неопределенным поведением и может вызвать ненормальное завершение программы и проблемы переносимости.
Присвойте объект, возвращенный из вызова функции, локальной переменной. Содержимое объекта временного срока службы копируется в переменную. Теперь вы можете изменять его безопасно.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: TEMP_OBJECT_ACCESS |
Влияние: Низкое |
ИДЕНТИФИКАТОР CWE: 825 |
Find defects (-checkers)
| Misuse of structure with flexible array member
| Write without a further read