Menetapkan pointer ke NULL
after free
adalah praktik yang meragukan yang sering dipopulerkan sebagai aturan "pemrograman yang baik" pada premis yang keliru. Ini adalah salah satu kebenaran palsu yang termasuk dalam kategori "kedengarannya benar" tetapi pada kenyataannya tidak ada yang benar-benar berguna (dan kadang-kadang menyebabkan konsekuensi negatif).
Diduga, menetapkan pointer ke NULL
after free
seharusnya mencegah masalah "double free" yang ditakuti ketika nilai pointer yang sama diteruskan ke free
lebih dari satu kali. Pada kenyataannya, dalam 9 kasus dari 10 masalah "bebas ganda" nyata terjadi ketika objek pointer yang berbeda memegang nilai pointer yang sama digunakan sebagai argumen untuk free
. Tak perlu dikatakan, menetapkan pointer ke NULL
setelah free
mencapai apa-apa untuk mencegah masalah dalam kasus seperti itu.
Tentu saja, dimungkinkan untuk mengalami masalah "bebas ganda" saat menggunakan objek pointer yang sama sebagai argumen free
. Namun, dalam situasi seperti itu biasanya menunjukkan masalah dengan struktur logis umum kode, bukan sekadar "bebas ganda". Cara yang tepat untuk menangani masalah dalam kasus-kasus seperti itu adalah dengan meninjau dan memikirkan kembali struktur kode untuk menghindari situasi ketika pointer yang sama diteruskan ke free
lebih dari satu kali. Dalam kasus seperti itu, mengatur pointer ke NULL
dan mempertimbangkan masalah "tetap" tidak lebih dari upaya untuk menyapu masalah di bawah karpet. Ini tidak akan berfungsi secara umum, karena masalah dengan struktur kode akan selalu menemukan cara lain untuk memanifestasikan dirinya.
Akhirnya, jika kode Anda dirancang khusus untuk bergantung pada nilai pointer yang ada NULL
atau tidak NULL
, tidak apa-apa untuk mengatur nilai pointer ke NULL
setelah free
. Tapi sebagai umum "praktik yang baik" aturan (seperti dalam "selalu mengatur pointer Anda ke NULL
setelah free
") itu, sekali lagi, palsu terkenal dan cukup berguna, sering diikuti oleh beberapa untuk murni agama, voodoo-seperti alasan.
ptr == NULL
sebelum melakukan sesuatu dengannya. Jika Anda tidak membatalkan pointer free'd Anda, Anda akan mendapatkanptr != NULL
tetapi masih pointer tidak dapat digunakan.