Pengendalian Pengecualian Pelanggaran Akses yang Luar Biasa
Apabila mengakses memori di luar ruang alamat program, pengecualian pelanggaran akses yang digeruni sering berlaku. Standard C tidak menyediakan mekanisme asli untuk menangkap pengecualian ini, menjadikan pembangun bergantung pada penyelesaian khusus platform.
Walau bagaimanapun, melalui keajaiban penyebaran pengecualian, pendekatan licik telah muncul yang membolehkan kami menangkap pelanggaran akses pengecualian dalam C tulen. Keajaiban ini terletak pada melemparkan pengecualian kita sendiri ke dalam pengendali isyarat dan sebaliknya mengendalikannya.
Pertimbangkan kod berikut:
void SignalHandler(int signal) { printf("Signal %d", signal); throw "!Access Violation!"; } int main() { signal(SIGSEGV, SignalHandler); try { *(int *)0 = 0; // Deliberately throwing an exception } catch (char *e) { printf("Exception Caught: %s\n", e); } printf("Unleashed, continuing our wicked ways!\n"); }
Dengan mendaftarkan pengendali isyarat kami sendiri untuk SIGSEGV (isyarat pelanggaran akses ), kami memintas pengecualian. Dalam pengendali, kami mencetak mesej dan membuang pengecualian tersuai, "¡Pelanggaran Akses!". Blok tangkapan dalam main() menangkap pengecualian tersuai ini dan mengendalikannya dengan sewajarnya.
Kaedah ini membolehkan kami mengendalikan pengecualian pelanggaran akses dengan anggun dan mengekalkan kawalan program, sesuatu yang sebelum ini sukar difahami dalam standard C . Sila ambil perhatian, pendekatan tidak konvensional ini tidak disyorkan untuk kegunaan umum. Amalan pengekodan yang baik harus menghalang pengecualian sedemikian daripada dibangkitkan di tempat pertama. Namun begitu, ia berfungsi sebagai penerokaan yang menarik tentang keupayaan pengendalian pengecualian C.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengendalikan Pengecualian Pelanggaran Akses dalam C Tulen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!