Partager via


C28644

avertissement C28644 : Valeur de retour de DPA_InsertPtr non vérifiée

Cet avertissement indique que la mémoire peut être divulguée.

La plupart des appels à la fonction DPA_InsertPtr utilisent une variable qui a été allouée sur le tas. Les fonctions utilisent ensuite la DPA et libèrent tous les objets stockés dans la DPA. Lorsque DPA_InsertPtr échoue, l’objet alloué ne peut plus être libéré par le code de nettoyage DPA, de sorte que l’appelant de DPA_InsertPtr doit libérer la mémoire. Notez l’appel à CleanupDPA dans l’exemple suivant. Si votre code ne libère pas les objets alloués d’une manière similaire à CleanupDPA , vous n’aurez peut-être pas à corriger quoi que ce soit. Ce défaut suppose que nous nous appuyons sur la DPA pour effectuer le suivi de tous les objets que nous aurons à libérer ultérieurement.

L'exemple de code suivant génère cet avertissement :

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

Les exemples de code suivants évitent cet avertissement :

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