Bayangkan coretan kod berikut:
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete[] ptr; }
Adakah selamat untuk memadamkan penuding tidak sah, ptr, dalam ini cara?
Jawapan:
Mengikut Piawaian C, ini adalah amalan yang khianat. Bahagian 5.3.5/3 berbunyi seperti berikut:
"Dalam alternatif pertama (padam objek), jika jenis statik operan berbeza daripada jenis dinamiknya, jenis statik hendaklah menjadi kelas asas bagi jenis dinamik operand dan jenis statik hendaklah mempunyai pemusnah maya atau tingkah laku tidak ditentukan Dalam alternatif kedua (tatasusunan padam) jika jenis dinamik objek yang akan dipadamkan berbeza daripada jenis statiknya, kelakuannya tidak ditentukan."
Nota kaki berikutan petikan ini lebih menekankan:
"Ini menunjukkan bahawa objek tidak boleh dipadam menggunakan penunjuk jenis void* kerana terdapat tiada objek jenis tidak sah."
Oleh itu, pemadaman melalui penunjuk tidak sah adalah dilarang sama sekali kerana ia boleh mengakibatkan tingkah laku yang tidak dapat diramalkan.
Atas ialah kandungan terperinci Adakah Memadam Penunjuk Kekosongan dalam C Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!