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