Partilhar via


C6279

warning C6279: <variável> é atribuída com novo escalar, excluído com exclusão de vetor []

Este aviso aparece apenas em código C++ e indica que a função de chamada atribuiu de forma incompatível memória com o operador escalar new , mas liberou com o operador excluir [] de vetor.Se a memória é atribuída com escalar new, ela normalmente deve ser liberada com escalar delete.

Há pelo menos três razões por que isso é provável que cause problemas:

  • Construtores para os objetos individuais no vetor não são invocados, embora os destruidores sejam.

  • Se operador new e operador delete globais (ou específicos de classe) não são compatíveis com operador new[] e operador deleete[], resultados inesperados são prováveis de ocorrer.

As ramificação exatas deste empecilho são difíceis de prever.O comportamento pode causar comportamento aleatório ou falhas devido ao uso de memória não inicializada porque construtores não serão chamados.Ou, isso pode causar alocações de memória e falhas em situações onde os operadores foram substituídos.Em casos raros, a incompatibilidade pode ser sem importância.Ferramenta de análise atualmente não faz distinção entre essas situações.

Exemplo

O código a seguir gera esse aviso:

class A
{
  // members
};

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

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

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