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