Avertissement C6279
'variable-name' est alloué avec scalaire nouveau, supprimé avec la suppression de tableau []
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 scalaire new
, mais l’a libérée avec l’opérateur de tableau delete[]
. Si la mémoire est allouée avec scalaire new
, elle doit généralement être libérée avec scalaire delete
.
Notes
Les ramifications exactes de ce défaut sont difficiles à prédire. Cela peut entraîner un comportement aléatoire ou des blocages en raison de l’utilisation de la mémoire non initialisée, car les constructeurs ne sont pas appelés. Ou bien, cela peut entraîner des allocations de mémoire et des blocages dans des situations où les opérateurs ont été remplacés. L’outil d’analyse ne fait actuellement pas la distinction entre ces situations.
Pour éviter tous ces types de problèmes d’allocation, 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 : NEW_ARRAY_DELETE_MISMATCH
Exemple
Le code suivant génère l’avertissement C6279. A
est alloué à l’aide new
, mais supprimé à l’aide delete[]
de :
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete[] pA;
}
Le code suivant évite cet avertissement à la delete
place :
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete pA;
}
Voir aussi
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