C28644

uyarı C28644: DPA_InsertPtr iade edilmeyen değer

Bu uyarı, belleğin sızdırılmış olabileceğini gösterir.

DPA_InsertPtr işlevine yapılan çağrıların çoğu yığında ayrılmış bir değişken kullanır. İşlevler daha sonra DPA'sını kullanır ve DPA'da depolanan tüm nesneleri serbest getirir. DPA_InsertPtr başarısız olduğunda, ayrılan nesne artık DPA temizleme kodu tarafından boşaltılamaz, bu nedenle DPA_InsertPtr çağıranın belleği boşaltması gerekir. Aşağıdaki örnekte cleanupDPA çağrısına dikkat edin. Kodunuz ayrılmış nesneleri CleanupDPA'ya benzer şekilde serbest hiçbir şeyi düzeltmeniz gerekmeyebilir. Bu hata, daha sonra ücretsiz olarak kullanmak zorunda olduğumuz tüm nesneleri izlemek için DPA'ya güvendiğimiz varsayılır.

Aşağıdaki kod örneği bu uyarıyı oluşturur:

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

Aşağıdaki kod örnekleri bu uyarıyı önler:

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