Condividi tramite


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 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 nulla. Questo difetto presuppone che ci si affida al DPA per tenere traccia di tutti gli oggetti che dobbiamo liberare in un secondo momento.

L'esempio di codice seguente 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);
}
}