Rumah >pembangunan bahagian belakang >C++ >Adakah Memadam Penunjuk Kekosongan dalam C Selamat?

Adakah Memadam Penunjuk Kekosongan dalam C Selamat?

Linda Hamilton
Linda Hamiltonasal
2024-12-16 21:19:15936semak imbas

Is Deleting a Void Pointer in C   Safe?

Perangkap Memadamkan Penunjuk Tidak Sah

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn