Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
aviso C28644: Valor de retorno de DPA_InsertPtr não verificado
Esse aviso indica que a memória pode estar vazando.
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 do DPA, portanto, o chamador do DPA_InsertPtr precisa liberar a memória. Observe a chamada para CleanupDPA no exemplo a seguir. Se o seu código não liberar os objetos alocados de maneira semelhante ao CleanupDPA talvez não seja necessário corrigir nada. Este defeito pressupõe que estamos confiando no DPA para manter o controle de todos os objetos que temos que liberar posteriormente.
O exemplo de código a seguir 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 exemplos de código a seguir 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);
}
}