Поделиться через


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