C6279
Aviso C6279: <variável> é atribuída com scalar new, excluída com a matriz delete []
Esse aviso aparece apenas em código C++ e indica que a função de chamada atribuiu memória de maneira inconsistente com o operador de escala novo, mas foi liberada com o operador de matriz excluir [].Se a memória for atribuída com scalar novo, geralmente, ela será liberada com scalar excluir.
Há, pelo menos, três razões para isso provavelmente causar problemas:
Os construtores dos objetos individuais na matriz não são invocados, embora os destruidores sejam.
Se o novo operador e o deletor de operador globais (ou específicos da classe) não forem compatíveis com o novo[] operador e o deletor[] de operador, é muito provável que ocorram resultados inesperados.
As ramificação exatas dessa falha são difíceis de prever.Isso pode causar comportamento aleatório ou falhas devido ao uso de memória não inicializada, porque os construtores não serão chamados.Ou, isso 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 não ter importância.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;
}
Para evitar esses tipos de problema de alocação no geral, use os mecanismos que são fornecidos pela STL (Biblioteca de Modelos Padrão) do C++.Incluem shared_ptr, unique_ptr e vector.Para obter mais informações, consulte Ponteiros inteligentes (C++ moderno) e Referência da Biblioteca Padrão C++.