Seseorang mungkin menghadapi situasi yang tidak dijangka apabila mengakses memori di luar sempadan tatasusunan. Ini menimbulkan persoalan, mengapa akses sedemikian tidak mencetuskan kesalahan pembahagian?
Pertimbangkan kod C berikut:
int main() { int *a = new int[2]; // int a[2]; // even this is not giving error a[0] = 0; a[1] = 1; a[2] = 2; // Accessing memory beyond the array bounds a[3] = 3; // Further access beyond the array bounds a[100] = 4; // Attempting to access memory far beyond the bounds int b; return 0; }
Bertentangan dengan jangkaan, kod tersebut disusun tanpa ralat. Ini berlaku kerana kelakuan capaian memori tersebut dianggap "tidak ditentukan" oleh piawaian C. Sebenarnya, ini bermakna apa sahaja boleh berlaku. Seseorang mungkin bernasib baik sekiranya tiada ralat berlaku, tetapi rasa keselamatan palsu ini boleh menutup kemungkinan pepijat dalam kod.
Oleh itu, adalah penting untuk mengelak daripada mengakses memori melebihi had tatasusunan yang diisytiharkan. Walaupun pelanggaran sedemikian mungkin tidak selalu membawa kepada ralat serta-merta, ia boleh memperkenalkan tingkah laku yang tidak dapat diramalkan dan menjejaskan kebolehpercayaan program.
Atas ialah kandungan terperinci Mengapakah Pelanggaran Sempadan Tatasusunan Sentiasa Menyebabkan Kerosakan Segmentasi dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!