Dela via


C28644

varning C28644: Returvärdet från DPA_InsertPtr inte markerat

Den här varningen anger att minnet kan ha läckt ut.

De flesta anrop till funktionen DPA_InsertPtr använder en variabel som allokerats på heapen. Functions använder sedan DPA och frigör alla objekt som lagras i DPA. När DPA_InsertPtr misslyckas kan det allokerade objektet inte längre frigöras av DPA-rensningskoden, så anroparen av DPA_InsertPtr måste frigöra minnet. Observera anropet till CleanupDPA- i följande exempel. Om koden inte frigör de allokerade objekten på ett sätt som liknar CleanupDPA behöver du kanske inte åtgärda något. Den här defekten förutsätter att vi förlitar oss på att DPA håller reda på alla objekt som vi måste frigöra senare.

Följande kodexempel genererar den här varningen:

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

Följande kodexempel undviker den här varningen:

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