Megosztás:


C26485 figyelmeztetés

"tömbnév" kifejezés: Nincs tömbből mutatóvá alakulás (bounds.3).

Megjegyzések

A C26481-hez hasonlóan ez az ellenőrzés is segít kikényszeríteni a C++ alapvető irányelvekI.13 szabályát: Ne adjon át tömböt egyetlen mutatóként. A szabály észleli azokat a helyeket, ahol a statikus tömbtípus adatai elvesznek a romlástól a nyers mutatóig. A zstring típusok és czstring a típusok nincsenek kizárva.

A C26481 és a C26485 a Bounds biztonsági profil szabályaiból származik. Ezek a szabályok a C++ alapvető irányelvek ellenőrzőjének első kiadásában lettek implementálva. A nyers mutatók kategóriára alkalmazhatók, mivel segítenek elkerülni a nyers mutatók nem biztonságos használatát.

példa

Ez a példa két figyelmeztetést eredményez a tömb mutatópéldányosítása miatti hívás során memcpy.

// c26485_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W4 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26485_bad.cpp
#include <cstring>
constexpr int array_length = 10;

int main() noexcept
{
    int const from_array[array_length] = { 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 };
    int to_array[array_length] = {};

    if (nullptr != memcpy(to_array, from_array, sizeof(int) * array_length))
        return 0;
    return 1;
}

A probléma megoldásához kerülje azokat a hívásokat, amelyek mutatóparamétereket használnak, de nem kezelik a határadatokat. Az ilyen függvények használata gyakran hibalehetőséget jelent. A C++ standard kódtárhívások előnyben részesítéséhez használja a C futtatókörnyezeti kódtár funkcióit. Fontolja meg a gsl::span vagy std::vector használatát a saját függvényeiben. A lebontott mutatótípusra való explicit típuskonverzió megakadályozza a figyelmeztetést, de nem akadályozza meg a hibás kód létrejöttét.