Freigeben über


C28644

Warnung C28644: Rückgabewert von DPA_InsertPtr nicht aktiviert

Diese Warnung weist darauf hin, dass Arbeitsspeicher verloren geht.

Die meisten Aufrufe der DPA_InsertPtr-Funktion verwenden eine Variable, die auf dem Heap zugeordnet wurde. Funktionen verwenden dann den DPA und geben alle im DPA gespeicherten Objekte frei. Wenn DPA_InsertPtr fehlschlägt, kann das zugeordnete Objekt nicht mehr vom DPA-Bereinigungscode freigegeben werden, sodass der Aufrufer von DPA_InsertPtr den Arbeitsspeicher freigeben muss. Beachten Sie den Aufruf von CleanupDPA im folgenden Beispiel. Wenn Ihr Code die zugeordneten Objekte nicht ähnlich wie CleanupDPA freigibt, müssen Sie möglicherweise nichts korrigieren. Dieser Fehler setzt voraus, dass wir uns auf die DPA verlassen, um alle Objekte nachzuverfolgen, die wir später freigeben müssen.

Im folgenden Codebeispiel wird diese Warnung generiert:

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

Die folgenden Codebeispiele vermeiden diese Warnung:

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