C6283
avertissement C6283 : <variable> est alloué avec un tableau new [], mais supprimé avec une variable scalaire delete
Cet avertissement apparaît uniquement dans le code C++ et indique que la fonction d'appel a alloué de façon 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.Ce défaut peut provoquer des fuites, des altérations de la mémoire, et, dans les situations où les opérateurs ont été substitués, des blocages.Si la mémoire est allouée avec un tableau new [], elle doit être libérée généralement avec un tableau delete[].
Exemple
Le code suivant génère cet avertissement :
void f( )
{
char *str = new char[50];
// code ...
delete str;
}
Pour corriger cet avertissement, utilisez le code suivant :
void f( )
{
char *str = new char[50];
// code ...
delete[] str;
}
L'avertissement C6283 s'applique uniquement aux tableaux de types primitifs, par exemple des entiers ou des caractères.Si les éléments du tableau sont des objets de type classe, l'avertissement C6278 s'affiche.
L'utilisation de new et de delete présente de nombreux pièges en terme de fuites de mémoire et d'exceptions.Pour éviter complètement ce genre de problème de fuites et d'exception, utilisez les mécanismes fournis par la bibliothèque de modèles standard (STL) C++.Ceux-ci incluent shared_ptr, unique_ptr, et vector.Pour plus d’informations, consultez Pointeurs intelligents (Modern C++) et Référence de bibliothèque standard C++.