AUTOSAR C++14 Rule M5-0-15

Индексация массива должна быть единственной формой адресной арифметики с указателями

Описание

Управляйте определением

Индексация массива должна быть единственной формой адресной арифметики с указателями.

Объяснение

Можно пересечь массив или контейнер двумя способами:

  • Постепенно увеличьте или постепенно уменьшите индекс массива или итератор, и затем используйте индекс массива или итератор, чтобы получить доступ к элементу.

  • Постепенно увеличьте или постепенно уменьшите указатель на массив и затем разыменуйте указатель.

Первый метод более ясен и менее подвержен ошибкам.

Все другие формы явной адресной арифметики с указателями вводят риск доступа к непреднамеренным ячейкам памяти.

Реализация Polyspace

Флаги средства проверки:

  • Арифметические операции на всех указателях, например, p+I, I+p и p-I, где p указатель и I целое число.

    Исключение позволено для итераторов, которые указывают на элементы в контейнерах, например, it ниже:

    std::vector<int> intList{ 1,2,3,4 };
    for( auto it = intList.begin() ; it != intList.end() ; ++it )

  • Индексация массива на указателях немассивов.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Проверяйте информацию

Группа: Выражения
Категория: необходимый, автоматизированный
Введенный в R2019a