﻿# V1111\. The index was used without check after it was checked in previous lines\.

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

Рассмотрим синтетический пример:

```cpp
#define SIZE 10
int buf[SIZE];

int do_something(int);

int some_bad_function(int idx)
{
  int res;

  if (idx < SIZE)
  {
    res = do_something(buf[idx]);
  }
  // ....
  res = do_something(buf[idx]); // <=
  return res;
}
```

В данном примере, если в функцию придёт значение больше или равное 'SIZE', то, несмотря на проверку, после неё произойдёт выход за границу массива\.

Следует как минимум добавить дополнительную проверку:

```cpp
int some_good_function(int idx)
{
  int res;

  if (idx < SIZE)
  {
    res = do_something(buf[idx]);
  }
  // ....
  if (idx < SIZE)
  {
    res = do_something(buf[idx]); //ok
  }

  return res;
}
```

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

* Сравнение должно происходить с константным выражением\.
* После сравнения не должно быть выхода из блока кода\.
* Доступ по индексу должен происходить в вычислимом контексте\.