Compartir vía


Advertencia C26481

No usar aritmética de punteros. Usar en su lugar un intervalo (bounds.1).

Comentarios

Esta comprobación admite la regla de C++ Core GuidelinesI.13: No pasar una matriz como un único puntero. Siempre que los punteros básicos se usen en operaciones aritméticas, deben reemplazarse por tipos más seguros de búferes, como span<T> o vector<T>.

Esta comprobación es más restrictiva que I.13: no omite zstring ni czstring tipos.

Las advertencias C26481 y C26485 proceden de las reglas de perfil de seguridad de límites. Estas reglas se implementaron en la primera versión del comprobador de C++ Core Guidelines. Son aplicables a la categoría de punteros básicos, ya que ayudan a evitar el uso no seguro de estos punteros.

Ejemplo

Este ejemplo da como resultado una advertencia para la aritmética de puntero.

// 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);
}