Partager via


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_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 : 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