Partager via


Avertissement C26485

Expression 'array-name' : Aucun tableau à la décomposition du pointeur (bounds.3).

Notes

Comme C26481, cette case activée permet d’appliquer la règle C++ Core Guidelines I.13 : Ne passez pas de tableau en tant que pointeur unique. La règle détecte les emplacements où les informations de type de tableau statique sont perdues de la décomposition vers un pointeur brut. Les zstring types et czstring les types ne sont pas exclus.

C26481 et C26485 proviennent des règles bounds Coffre ty Profile. Ces règles ont été implémentées dans la première version du vérificateur des instructions de base C++. Elles s’appliquent à la catégorie des pointeurs bruts, car elles permettent d’éviter l’utilisation dangereuse de pointeurs bruts.

Exemple

Cet exemple génère deux avertissements pour la dégradation du tableau vers le pointeur dans l’appel à 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;
}

Pour résoudre ce problème, évitez les appels qui prennent des paramètres de pointeur, mais ne gèrent pas les informations liées. L’utilisation de ces fonctions est souvent sujette aux erreurs. Préférez les appels de bibliothèque standard C++ aux fonctions de bibliothèque runtime C. Envisagez d’utiliser gsl::span ou std::vector dans vos propres fonctions. Un cast explicite vers le type de pointeur décomposé empêche l’avertissement, mais il n’empêche pas le code buggy.