Share via


C28644

advertencia C28644: Valor devuelto de DPA_InsertPtr no activado

Esta advertencia indica que se podría perder memoria.

La mayoría de las llamadas a la función DPA_InsertPtr usan una variable que se asignó en el montón. A continuación, las funciones usan DPA y liberan todos los objetos almacenados en el DPA. Cuando se produce un error en DPA_InsertPtr , el código de limpieza de DPA ya no puede liberar el objeto asignado, por lo que el autor de la llamada de DPA_InsertPtr debe liberar la memoria. Observe la llamada a CleanupDPA en el ejemplo siguiente. Si el código no libera los objetos asignados de una manera similar a CleanupDPA , es posible que no tenga que corregir nada. Este defecto supone que estamos confiando en el DPA para realizar un seguimiento de todos los objetos que tenemos que liberar más adelante.

El siguiente código de ejemplo genera esta advertencia:

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

En los ejemplos de código siguientes se evita esta advertencia:

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