C6279C6279

avertissement C6279 : <variable > est alloué avec une variable scalaire new, supprimé avec un tableau delete]warning C6279: <variable> is allocated with scalar new, deleted with array 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 mémoire avec la valeur scalaire nouveau (opérateur), mais l’a libérée avec le tableau delete [] opérateur.This warning appears only in C++ code and indicates that the calling function has inconsistently allocated memory with the scalar new operator, but freed it with the array delete [] operator. Si la mémoire est allouée avec une variable scalaire nouveau, elle doit être libérée généralement avec une variable scalaire supprimer.If memory is allocated with scalar new, it should typically be freed with scalar delete.

Il existe au moins trois raisons susceptibles de provoquer des problèmes :There are at least three reasons that this is likely to cause problems:

  • Les constructeurs des objets individuels dans le tableau ne sont pas appelés, bien que les destructeurs sont.The constructors for the individual objects in the array are not invoked, although the destructors are.

  • Si global (ou classe spécifique) new, opérateur et opérateur delete ne sont pas compatibles avec opérateur new [] et opérateur delete [], des résultats inattendus sont susceptibles de se produire.If global (or class-specific) operator new and operator delete are not compatible with operator new[] and operator delete[], unexpected results are likely to occur.

    Les ramifications exactes de ce défaut sont difficiles à prévoir.The exact ramifications of this defect are difficult to predict. Il peut entraîner un comportement aléatoire ou se bloque en raison de l’utilisation de la mémoire non initialisée, car les constructeurs ne sont pas appelés.It might cause random behavior or crashes due to usage of uninitialized memory because constructors are not invoked. Ou bien, il peut provoquer des allocations de mémoire et les incidents dans les situations où les opérateurs ont été substitués.Or, it might cause memory allocations and crashes in situations where operators have been overridden. Dans de rares cas, l’incompatibilité peut être sans importance.In rare cases, the mismatch might be unimportant. L’outil d’analyse ne distingue pas entre ces situations.Analysis tool does not currently distinguish between these situations.

ExempleExample

Le code suivant génère cet avertissement :The following code generates this warning:

class A
{
  // members
};

void f ( )
{
  A *pA = new A;
  //code ...
  delete[] pA;
}

Pour corriger cet avertissement, utilisez le code suivant :To correct this warning, use the following code:

void f( )
{
  A *pA = new A;
  //code ...
  delete pA;
}

Pour éviter ces types de problèmes d’allocation, utilisez les mécanismes fournis par la bibliothèque STL (C++ Standard Template Library).To avoid these kinds of allocation problems altogether, use the mechanisms that are provided by the C++ Standard Template Library (STL). Ceux-ci incluent shared_ptr, unique_ptr, et vecteur.These include shared_ptr, unique_ptr, and vector. Pour plus d’informations, consultez pointeurs intelligents et bibliothèque Standard C++.For more information, see Smart Pointers and C++ Standard Library.

Voir aussiSee Also

C6014C6014