Bagikan melalui


Peringatan C26404

Jangan hapus yang owner<T> mungkin dalam status tidak valid (r.3)

Keterangan

Setelah penunjuk pemilik merilis atau mentransfer sumber dayanya, pointer tersebut masuk ke status "tidak valid". Menghapus penunjuk seperti itu dapat menyebabkan kerusakan memori langsung karena penghapusan ganda, atau pelanggaran akses saat sumber daya yang dihapus diakses dari penunjuk pemilik lain.

Nama analisis kode: DONT_DELETE_INVALID

Contoh 1

Menghapus pemilik setelah mentransfer nilainya:

gsl::owner<State*> validState = nullptr;
gsl::owner<State*> state = ReadState();
validState = state;
if (!IsValid(state))
    delete state;   // C26404

Contoh 2

Menghapus pemilik yang tidak diinisialisasi:

gsl::owner<Message*> message;
if (popLast)
    message = ReleaseMessage();
delete message; // C26404