﻿# V507\. Pointer to local array 'X' is stored outside the scope of this array\. Such a pointer will become invalid\.

Анализатор обнаружил потенциально возможную ошибку, связанную с хранением указателя на локальный массив\. Предупреждение выдается в том случае, если время жизни массива меньше, чем время жизни указателя на него\.

Первый пример:

```cpp
class MyClass1
{
  int *m_p;
  void Foo()
  {
    int localArray[33];
    ...
    m_p = localArray;
  }
};
```

Массив localArray создается в стеке и массив localArray  перестанет существовать по завершению функции Foo\(\)\. Однако указатель на этот массив будет сохранен в переменной m\_p и может по неаккуратности использоваться, что приведет к ошибке\.

Второй пример:

```cpp
struct CVariable {
  ...
  char  name[64];
};

void CRendererContext::RiGeometryV(int n, char *tokens[])
{
  for (i=0;i<n;i++)
  {
    CVariable  var;
    if (parseVariable(&var, NULL, tokens[i])) {
      tokens[i]  =  var.name;
  }
}
```

В этом примере указатель на массив, находящийся в переменной типа CVariable, сохраняется во внешнем массиве\. В результате массив "tokens" после завершения функции RiGeometryV будет содержать указатели на уже несуществующие объекты\.

Предупреждение V507 не всегда свидетельствует о наличии ошибки\. Приведем сокращенный фрагмент кода, который анализатор считает опасным, но на самом деле этот код корректен:

```cpp
png_infop info_ptr = png_create_info_struct(png_ptr);
...
BYTE trans[256];
info_ptr->trans = trans;
...
png_destroy_write_struct(&png_ptr, &info_ptr);
```

В данном коде время жизни объекта info\_ptr совпадает с временем жизни trans\. Объект создается внутри png\_create\_info\_struct \(\), а уничтожается внутри png\_destroy\_write\_struct\(\)\. Анализатор не может разобрать данный случай и предполагает, что объект png\_ptr поступает извне\. Пример кода, где анализатор был бы прав:

```cpp
void Foo()
{
  png_infop info_ptr;
  info_ptr = GetExternInfoPng();
  BYTE trans[256];
  info_ptr->trans = trans;
}
```

Это сообщение подобно сообщению [V506](https://pvs-studio.ru/ru/docs/warnings/v506/)\.