C28644
aviso C28644: valor retornado de DPA_InsertPtr não verificado
Esse aviso indica que a memória pode ter vazado.
A maioria das chamadas para a função DPA_InsertPtr usa uma variável que foi alocada no heap. Em seguida, as funções usam o DPA e liberam todos os objetos armazenados no DPA. Quando DPA_InsertPtr falha, o objeto alocado não pode mais ser liberado pelo código de limpeza DPA, portanto, o chamador de DPA_InsertPtr precisa liberar a memória. Observe a chamada para CleanupDPA no exemplo a seguir. Se o código não liberar os objetos alocados de maneira semelhante a CleanupDPA , talvez você não precise corrigir nada. Esse defeito pressupõe que estamos confiando no DPA para controlar todos os objetos que temos para liberar posteriormente.
O seguinte código gera esse aviso:
void Func()
{
WCHAR*pszBuf=newWCHAR[MAX_PATH];
DPA_InsertPtr(_hdpa, DA_LAST, pszBuf);
}
void CleanupDPA()
{
int count = DPA_GetCount(_hdpa);
for (int i = 0; i < count; i++)
{
delete [] (LPWSTR)DPA_GetPtr(_hdpa, i);
}
}
Os seguintes exemplos de código evitam esse aviso:
void Func()
{
WCHAR*pszBuf=newWCHAR[MAX_PATH];
if (DPA_ERR == DPA_InsertPtr(_hdpa, DA_LAST, pszBuf))
{
delete [] pszBuf;
}
}
void CleanupDPA()
{
int count = DPA_GetCount(_hdpa);
for (int i = 0; i < count; i++)
{
delete [] (LPWSTR)DPA_GetPtr(_hdpa, i);
}
}