C6279

Aviso C6279: <variable> é alocada com escalar novo, excluídos com a exclusão do array]

Esse aviso aparece somente no código em C++ e indica que a função de chamada inconsistentemente alocou memória com a scalar nova operador, mas o liberado com a matriz Excluir [ operador. Se a memória é alocada com scalar nova, normalmente deve ser liberado com scalar Excluir.

Há pelo menos três razões para que esta é a probabilidade de causar problemas:

  • Os construtores de objetos individuais da matriz não são invocados, embora os destrutores são.

  • Se global (ou específicos de classe) novo operador e Excluir do operador não são compatíveis com [] de novo operador e operador excluir [, resultados inesperados provavelmente ocorrerão.

As ramificações exatas deste defeito são difíceis de prever. Ele pode causar comportamento aleatório ou quedas devido ao uso de memória não inicializada, porque os construtores não são invocados. Ou então, ele poderá causar alocações de memória e de falhas em situações onde operadores tem sido substituídos. Em casos raros, a incompatibilidade pode ser importante. Atualmente, a ferramenta de análise não faz distinção entre essas situações.

Exemplo

O código a seguir gera este aviso:

class A
{
  // members
};

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

Para corrigir esse aviso, use o seguinte código:

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