Compartilhar via


C6279

Aviso C6279: <variável>é alocada com escalar novo, excluídos com [] de excluir de array

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

Há pelo menos três razões que isso pode causar problemas:

  • Os construtores para os objetos individuais da matriz são invocados, apesar dos destruidores.

  • Se global (ou específicas de classe) operador novo and Excluir operador não são compatível com o operador de [novo and operador delete, resultados inesperados têm probabilidade de ocorrer.

As ramificações exatas desse 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, pode causar alocações de memória e falhas em situações em que os operadores foram substituídos.Em casos raros, a incompatibilidade pode ser sem importância.Ferramenta de análise no momento 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;
}