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

Adakah Memadam Penunjuk Kekosongan dalam C Selamat?

Linda Hamilton
Lepaskan: 2024-12-16 21:19:15
asal
885 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan