다음을 통해 공유


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