Apa Berlaku Apabila Fungsi Ahli Dipanggil pada Penunjuk Objek Null?
Dalam C , memanggil fungsi ahli pada penunjuk objek nol dianggap sebagai tingkah laku yang tidak ditentukan. Ini bermakna bahawa hasil tindakan sedemikian tidak dapat diramalkan dan mungkin berbeza-beza merentas pengkompil dan platform yang berbeza.
Pertimbangkan coretan kod berikut:
class A
{
public:
void fun()
{
std::cout << "fun" << std::endl;
}
};
A* a = NULL;
a->fun();
Salin selepas log masuk
Apabila kod ini dilaksanakan, ia cuba untuk panggil fungsi ahli fun() pada penunjuk nol (a), yang menunjuk kepada tiada objek yang sah dalam ingatan. Gelagat kod ini tidak ditentukan dan beberapa senario mungkin berlaku:
-
Ranap: Dalam sesetengah kes, memanggil fungsi ahli pada penuding nol boleh menyebabkan ranap program disebabkan oleh pelanggaran akses. Apabila penunjuk objek dinyahrujuk (cth., a->fun()), atur cara mungkin cuba mengakses lokasi memori yang tidak sah, yang membawa kepada ralat masa jalan.
-
Kesalahan Segmentasi: Sama seperti ranap sistem, kesalahan pembahagian boleh berlaku jika kod cuba mengakses memori di luar ruang alamat yang sah. Ini boleh berlaku apabila penuding nol digunakan untuk mengakses memori yang bukan milik program.
-
Output Tidak Dijangka: Dalam sesetengah kes, kod mungkin dilaksanakan tanpa sebarang ralat yang jelas dan menghasilkan yang tidak dijangka keluaran. Ini kerana pengkompil mungkin menjana kod yang menganggap penunjuk itu tidak batal, walaupun ia sebenarnya. Dalam kod yang disediakan, ada kemungkinan fungsi fun() berjaya dilaksanakan, mencetak "fun" ke konsol.
-
Keputusan Tidak Diramal: Secara umum, tingkah laku memanggil ahli fungsi pada penuding nol tidak dapat diramalkan dan mungkin berbeza-beza bergantung pada faktor seperti pengoptimuman pengkompil, sistem pengendalian dan seni bina perkakasan. Ia tidak dijamin untuk menghasilkan hasil tertentu dan harus dielakkan.
Untuk mengelakkan tingkah laku yang tidak ditentukan, adalah penting untuk memastikan bahawa penunjuk objek sentiasa menunjuk kepada objek yang sah sebelum cuba memanggil fungsi ahli pada mereka. Ini boleh dilakukan dengan menyemak penunjuk nol sebelum membatalkan rujukannya.
Atas ialah kandungan terperinci Apa yang Berlaku Apabila Anda Memanggil Fungsi Ahli pada Penunjuk Objek Null dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!