Penjelasan lebih lanjut dari judul pertanyaannya adalah, izinkan saya menjelaskan skenario saya.
Saya memiliki wadah daftar penunjuk ke beberapa objek di heap. Setiap kali suatu objek baru dibuat, penunjuknya akan ditambahkan ke daftar dan setiap kali suatu objek dihapus, penunjuknya akan dihapus. Dapat dikatakan bahwa semua petunjuk dalam daftar ini selalu valid.
Banyak objek dalam daftar berisi petunjuk ke objek lain dalam daftar yang sama.
Sebelum saya melakukan dereferensi salah satu dari petunjuk tersebut, saya ingin menggunakan fungsi CheckAgainstList(ptr*)
untuk memastikan bahwa satu objek menunjuk ke objek lain dalam daftar yang sama dan oleh karena itu tidak menunjuk ke objek yang telah dihapus.
Pakailah topi kertas timah Anda sekarang, Apakah ini mungkin?
- Objek A memiliki pointer ke objek B dengan alamat memori
0x00988e50
. - Objek B dihapus.
- Objek C dibuat dan ditempatkan ke dalam ruang memori yang baru dibebaskan
0x00988e50
. CheckAgainstList(ptr*)
mengembalikan nilai true ketika kita memeriksa pointer karena objek C ada dalam daftar dan berada di alamat memori yang sama dengan yang digunakan B.
Sekarang kita mempunyai bug karena A mengira ia mempunyai penunjuk ke B, namun B hilang dan C bisa dikatakan menggantikannya.
Apakah potensi bug ini mungkin terjadi?