Cara Mengendalikan Gelagat Tidak Ditakrifkan dalam C
Dalam C , membatalkan penunjuk nol tidak mencetuskan pengecualian; ia mengakibatkan tingkah laku yang tidak ditentukan. Tingkah laku ini sering menjelma sebagai kesalahan atau ranap pembahagian.
Pertimbangkan kod berikut:
<code class="cpp">try { int* p = nullptr; *p = 1; } catch (...) { cout << "null pointer." << endl; }</code>
Percubaan untuk menangkap "pengecualian penuding nol" ini tidak akan berfungsi kerana penyahrujukan penuding nol tidak 't pengecualian dalam C . Sebaliknya, ia menimbulkan gelagat yang tidak ditentukan.
Penyelesaian: Pengesanan Manual dan Balingan Pengecualian
Dalam C , adalah tanggungjawab pengaturcara untuk mengesan penunjuk nol secara manual dan membuang pengecualian jika ditemui . Ini boleh dicapai dengan semakan eksplisit sebelum membatalkan rujukan:
<code class="cpp">if (p != nullptr) { *p = 1; } else { throw invalid_argument("null pointer"); }</code>
Dengan melontar pengecualian secara eksplisit, ia boleh ditangkap dalam blok cuba-tangkap.
Nota tentang Pelaksanaan C
Sesetengah pelaksanaan C, seperti Visual C , mungkin mempunyai ciri untuk "menukar" pengecualian sistem/perkakasan kepada pengecualian C. Walau bagaimanapun, fungsi bukan standard ini disertakan dengan penalti prestasi dan tidak boleh dipercayai.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, dengan mengingati format soalan dan menangani inti artikel: * Mengapa Penyahrujukan Penunjuk Nol dalam C Tidak Membuang Pengecualian? * Bagaimana Saya Mengendalikan Unde. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!