Compartilhar via


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