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