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