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