Поделиться через


Предупреждение C26481

Не используйте арифметический указатель. Используйте вместо этого диапазон (bounds.1).

Замечания

Эта проверка поддерживает правило основных рекомендаций C++ I.13: не передает массив в виде единого указателя. Каждый раз, когда необработанные указатели используются в арифметических операциях, они должны быть заменены более безопасными типами буферов, например span<T> или vector<T>.

Эта проверка является более строгой, чем I.13: она не пропускает zstring или czstring не вводит типы.

C26481 и C26485 приходят из правил профиля безопасности Границ. Эти правила были реализованы в первом выпуске средства проверки основных рекомендаций C++ . Они применимы к категории необработанных указателей, так как они помогают избежать небезопасного использования необработанных указателей.

Пример

Этот пример приводит к предупреждению для арифметики указателя.

// c26481_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W3 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26481_bad.cpp

int main() noexcept
{
    int * from_array = new int(10);
    int * later_array = from_array + 1;
    delete[](from_array);
}