Compartir a través de


C6279

Actualización: noviembre 2007

C6279

Advertencia C6279: <variable> está asignado al nuevo escalar, pero se eliminará con la eliminación de matriz []

Esta advertencia sólo aparece en el código de C++ e indica que la función que llama ha asignado memoria de manera inconsistente con el operador de escalar new, pero la ha liberado con el operador de matriz delete []. Si la memoria se asigna con el escalar nuevo, lo normal es liberarla con el escalar delete.

Existen al menos tres razones por las que es probable que este uso produzca problemas:

  • No se invocan los constructores de los objetos individuales de la matriz, pero sí los destructores.

  • Si los operadores globales (o específicos de las clases) new y delete no son compatibles con los operadores new[] y delete[], es probable que se produzcan resultados inesperados.

Resulta difícil predecir con exactitud las ramificaciones de este defecto. Podría provocar un comportamiento aleatorio o bloqueos, debido al uso de memoria que no se ha inicializado al no haberse invocado los constructores. También podría producir asignaciones de memoria y bloqueos en situaciones en que se han reemplazado los operadores. En muy pocos casos esta desigualdad puede no tener importancia. La herramienta de análisis no distingue actualmente entre estas situaciones.

Ejemplo

El código siguiente genera esta advertencia:

class A
{
  // members
};

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

Para corregir esta advertencia, utilice el código siguiente:

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