Partilhar via


C28644

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);
}
}