共用方式為


C28644

警告 C28644:未核取DPA_InsertPtr傳回值

這個警告表示記憶體可能會流失。

DPA_InsertPtr 函式的大部分呼叫都會使用堆積上配置的變數。 函式接著會使用 DPA,並釋放儲存在 DPA 中的所有物件。 當DPA_InsertPtr失敗時,DPA 清除程式代碼無法再釋放配置的物件,因此DPA_InsertPtr呼叫端必須釋放記憶體。 請注意下列範例中 CleanupDPA 的呼叫。 如果您的程式代碼未以類似 CleanupDPA 的方式來釋放已配置的物件,您可能不需要修正任何專案。 此瑕疵假設我們依賴 DPA 來追蹤我們稍後必須釋放的所有物件。

下列程式碼範例會產生此警告:

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

下列程式代碼範例會避免這個警告:

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