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