Teilen über


C28644

Warnung C28644: Rückgabewert von DPA_InsertPtr nicht aktiviert

Diese Warnung weist darauf hin, dass Speicher möglicherweise verloren geht.

Die meisten Aufrufe der DPA_InsertPtr-Funktion verwenden eine Variable, die für den Heap zugewiesen 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 durch den DPA-Bereinigungscode freigegeben werden, sodass der Aufrufer von DPA_InsertPtr den Speicher freigeben muss. Beachten Sie den Aufruf von CleanupDPA- im folgenden Beispiel. Wenn Ihr Code die zugeordneten Objekte nicht auf eine Weise freigibt, die CleanupDPA-, müssen Sie möglicherweise nichts beheben. Dieser Fehler geht davon aus, dass wir uns auf den DPA verlassen, um alle Objekte nachzuverfolgen, die wir später frei haben.

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