Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Копирование адреса объекта в указатель/ссылку с большим временем жизни может привести к возникновению "висячего" указателя/ссылки после того, как исходный объект перестанет существовать. Это является нарушением безопасности памяти. Использование данных, на которые указывает "висячий" указатель/ссылка, приводит к неопределенному поведению.
Первый пример кода, на который анализатор выдаст предупреждение:
int& Foo( void )
{
int some_variable;
....
return some_variable;
}
Второй пример кода, на который анализатор выдаст предупреждение:
#include <stddef.h>
void Bar( int **ptr )
{
int some_variable;
....
if (ptr != NULL)
*ptr = &some_variable;
}
Данная диагностика классифицируется как:
|