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