Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
peringatan C28644: Mengembalikan nilai dari DPA_InsertPtr tidak diperiksa
Peringatan ini menunjukkan bahwa memori mungkin bocor.
Sebagian besar panggilan ke fungsi DPA_InsertPtr menggunakan variabel yang dialokasikan pada tumpukan. Functions kemudian menggunakan DPA dan membebaskan semua objek yang disimpan di DPA. Ketika DPA_InsertPtr gagal, objek yang dialokasikan tidak dapat lagi dibebaskan oleh kode pembersihan DPA, sehingga pemanggil DPA_InsertPtr perlu membebaskan memori. Perhatikan panggilan ke CleanupDPA dalam contoh berikut. Jika kode Anda tidak membebaskan objek yang dialokasikan dengan cara yang mirip dengan CleanupDPA Anda mungkin tidak perlu memperbaiki apa pun. Cacat ini mengasumsikan kita mengandalkan DPA untuk melacak semua objek yang harus kita bebaskan nanti.
Contoh kode berikut menghasilkan peringatan ini:
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);
}
}
Contoh kode berikut menghindari peringatan ini:
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);
}
}