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 new
delete
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_ptr
et 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 delete
incompatible :
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;
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour