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