Avertissement C6283

'variable-name' est alloué avec le tableau nouveau [], mais supprimé avec la suppression scalaire

Cet avertissement apparaît uniquement dans le code C++ et indique que la fonction appelante a alloué de manière incohérente de la mémoire avec l’opérateur de tableau new [] , mais l’a libérée avec l’opérateur scalaire delete .

Notes

Ce défaut peut entraîner des fuites, des altérations de mémoire et, dans des situations où les opérateurs ont été remplacés, se bloquent. Si la mémoire est allouée à un tableau new [], elle doit généralement être libérée avec le tableau delete[].

Avertissement C6283 s’applique uniquement aux tableaux de types primitifs tels que des entiers ou des caractères. Si les éléments du tableau sont des objets de type classe, avertissement C6278 est émis.

L’utilisation et présente de nombreux pièges en termes de newdelete fuites de mémoire et d’exceptions. Pour éviter ces types de fuites potentielles, utilisez les mécanismes fournis par la bibliothèque C++ Standard (STL). Ceux-ci incluent shared_ptr, unique_ptret des conteneurs tels que vector. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.

Nom de l’analyse du code : PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH

Exemple

Le code suivant génère l’avertissement C6283. str est alloué à l’aide new ...[...] , mais libéré à l’aide de la fonction deleteincompatible :

void f( )
{
    char *str = new char[50];
    delete str;
}

Le code suivant corrige cet avertissement à l’aide de la fonction delete[]correspondante :

void f( )
{
    char *str = new char[50];
    delete[] str;
}