C28644
avviso C28644: valore restituito da DPA_InsertPtr non selezionato
Questo avviso indica che la memoria potrebbe essere persa.
La maggior parte delle chiamate alla funzione DPA_InsertPtr usa una variabile allocata nell'heap. Le funzioni usano quindi il DPA e liberano tutti gli oggetti archiviati nel DPA. Quando DPA_InsertPtr ha esito negativo, l'oggetto allocato non può più essere liberato dal codice di pulizia DPA, quindi il chiamante di DPA_InsertPtr deve liberare la memoria. Si noti la chiamata a CleanupDPA nell'esempio seguente. Se il codice non libera gli oggetti allocati in modo simile a CleanupDPA , potrebbe non essere necessario correggere alcun elemento. Questo difetto presuppone che ci si basi sul DPA per tenere traccia di tutti gli oggetti che è necessario liberare in un secondo momento.
Nell'esempio riportato di seguito il codice genera questo avviso:
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);
}
}
Gli esempi di codice seguenti evitano questo avviso:
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);
}
}