Предупреждение 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);
}