Pengendalian Pengecualian untuk Pelanggaran Akses dalam Standard C
Mengakses memori melebihi sempadan objek yang diperuntukkan boleh membawa kepada pengecualian pelanggaran akses. Dalam standard C , adalah tidak mungkin untuk menangkap pengecualian ini secara langsung menggunakan pengendali pengecualian standard.
Untuk mengendalikan pelanggaran akses, satu pendekatan melibatkan penggunaan mekanisme khusus platform. Walau bagaimanapun, dalam artikel ini, kami meneroka kaedah yang memanfaatkan pengecualian dan pengendalian ralat dalam standard C .
Keajaiban Lempar dan Tangkap
Kunci untuk menangkap pelanggaran akses adalah untuk membuang pengecualian dalam fungsi pengendali isyarat dan kemudian menangkapnya dalam program utama. Ini memastikan program tidak ditamatkan secara tidak normal apabila pelanggaran akses berlaku.
void SignalHandler(int signal) { printf("Signal %d",signal); throw "!Access Violation!"; }
Dalam fungsi utama, kita mesti menetapkan pengendali isyarat untuk isyarat SIGSEGV (isyarat untuk kerosakan segmentasi) dan mewujudkan percubaan -tangkap blok untuk mengendalikan pengecualian.
int main() { typedef void (*SignalHandlerPointer)(int); SignalHandlerPointer previousHandler; previousHandler = signal(SIGSEGV , SignalHandler); try{ *(int *) 0 = 0;// Baaaaaaad thing that should never be caught. You should write good code in the first place. } catch(char *e) { printf("Exception Caught: %s\n",e); } printf("Now we continue, unhindered, like the abomination never happened. (I am an EVIL genius)\n"); printf("But please kids, DONT TRY THIS AT HOME ;)\n"); }
Kesimpulan
Walaupun menangkap pelanggaran akses dalam standard C tidak mudah, pendekatan yang dibentangkan dalam artikel ini menawarkan cara untuk mengendalikan pengecualian ini secara pemrograman. Dengan menggunakan pengendali isyarat dan mekanisme pengendalian pengecualian, pembangun boleh mencipta kod yang lebih mantap yang boleh pulih dengan anggun daripada ralat tersebut.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Pelanggaran Akses dalam Standard C Menggunakan Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!