C6278
C6278 de aviso: <variable> é atribuído com a nova matriz [], mas excluído com excluir único.Os destruidores não serão chamados
Este aviso aparece apenas em código C++ e indica que a função de chamada incompatìvel atribuiu a memória com o operador de novo [] de matriz, mas ela lançado com o operador escalar de delete .Este comportamento é indefinido de acordo com o padrão C++ e a implementação do Microsoft Visual C++.Há pelo menos três comerciais que isso é provável causar problemas:
Construtores para os objetos individuais na matriz são invocados, mas os destruidores não serão chamados.
Se global, ou específico de classe, operador novo e supressão de operador não é compatível com operador novo [] e **supressão de operador []**resultados inesperados, é provável de ocorrer.
Sempre é muito arriscado confiar em comportamento indefinido.
As ramificação exatas de este empecilho são difíceis de prever.Pode resultar em vazamentos para classes com os destruidores que executam a liberação de memória; comportamento inconsistente para classes com os destruidores que executam qualquer operação semanticamente significativa; os ou danos e falhas de memória quando os operadores são substituídos.Em outros casos a incompatibilidade pode ser sem importância, dependendo da implementação do compilador e das bibliotecas.A ferramenta de análise não pode sempre distinguir entre essas situações.
Se a memória é atribuída a matriz novo [], deve ser normalmente é liberada com matriz excluir [].
Exemplo
O seguinte exemplo de código gera este aviso:
class A
{
// members
};
void f( )
{
A *pA = new A[5];
// code ...
delete pA;
}
Para corrigir este aviso, use o código de exemplo a seguir:
void f( )
{
A *pA = new A[5];
// code ...
delete[] pA;
}
Se o objeto subjacente na matriz é um tipo primitivo como int, float, enum, ou o ponteiro, não há destrutor a ser chamado.Aviso C6283 é relatada em esses casos o lugar.