Skip to main content

ความผิดปกติของการแบ่งส่วนคืออะไร?

ความผิดพลาดในการแบ่งส่วนเป็นข้อผิดพลาดของคอมพิวเตอร์ที่เกิดขึ้นเมื่อโปรแกรมพยายามเข้าถึงภูมิภาคของหน่วยความจำในลักษณะที่ไม่ถูกต้องข้อผิดพลาดเหล่านี้สามารถอ่านข้อผิดพลาดได้ซึ่งมีความพยายามในการอ่านข้อมูลที่ไม่ได้เริ่มต้นอย่างถูกต้องหรือข้อผิดพลาดในการเขียนซึ่งโปรแกรมพยายามเขียนข้อมูลไปยังตำแหน่งที่ไม่ถูกต้องในหน่วยความจำในการพูดจาคอมพิวเตอร์คำนี้มักจะสั้นลงเป็น Segfaultเนื่องจาก Segfaults สามารถเกิดขึ้นได้ทั้งในการอ่านข้อมูลและการเขียนจึงสามารถเกิดขึ้นได้ในบริบทที่หลากหลายและมีชื่อเฉพาะที่แตกต่างกันรวมถึงข้อผิดพลาดของบัสบัฟเฟอร์ล้นบัฟเฟอร์ความผิดพลาดของหน้าและการละเมิดการจัดเก็บภาษาคอมพิวเตอร์ได้ง่ายกว่าภาษาอื่น ๆ Segfaults ไม่ได้เป็นส่วนหนึ่งของภาษาคอมพิวเตอร์เองในทางทฤษฎีแล้วภาษาคอมพิวเตอร์ใด ๆ อาจทำให้เกิดข้อผิดพลาดในการเขียนข้อมูลที่วางไข่ Segfaultภาษาคอมพิวเตอร์ที่อนุญาตให้โปรแกรมเมอร์สามารถจัดการหน่วยความจำได้อย่างชัดเจนเช่น C ++ อนุญาตให้ผู้ใช้แนะนำ segfaults ที่ไม่ได้ตั้งใจค่อนข้างง่ายด้วยการเขียนโปรแกรมที่ไม่ดีภาษาที่ไม่อนุญาตให้มีการจัดการหน่วยความจำที่ชัดเจนเช่น Java จัดการปัญหาหน่วยความจำส่วนใหญ่โดยไม่ต้องมีสัญญาณรบกวนโปรแกรมเมอร์และลดความผิดพลาดในการแบ่งส่วนโดยให้โปรแกรมเมอร์ไม่สามารถเข้าถึงพื้นที่นอกหน่วยความจำที่จัดสรรได้

วิธีที่โปรแกรมเมอร์สามารถทำได้สร้างความผิดพลาดในการแบ่งส่วนแตกต่างกันไปขึ้นอยู่กับวิธีการใช้ข้อมูลมีโครงสร้างบางอย่างที่ง่ายต่อการสร้างข้อผิดพลาดนี้ด้วยผู้ร้ายทั่วไปคนหนึ่งของ Segfault คือข้อผิดพลาดในการล้นอาเรย์ซึ่งมีข้อมูลเฉพาะอยู่ในสล็อตภายในตำแหน่งหน่วยความจำเฉพาะ แต่โปรแกรมเมอร์พยายามที่จะเข้าถึงสล็อตที่ไม่มีอยู่Segfaults เกิดจากสถานการณ์เหล่านี้มักจะยากที่จะติดตามภาษาคอมพิวเตอร์บางภาษามีการตรวจสอบขอบเขตซึ่งคาดว่าจะเกิดข้อผิดพลาดประเภทนี้และจะไม่ปล่อยให้ผู้ใช้พยายามเข้าถึงสล็อตที่ไม่ถูกต้อง

วิธีทั่วไปน้อยกว่าที่ Segfaults สามารถสร้างได้เกิดขึ้นเมื่อสองภาษาคอมพิวเตอร์ผ่านข้อมูลกันโดยใช้ Aพร็อกซีในบริบทนี้ความผิดปกติของการแบ่งกลุ่มนั้นยากที่จะวินิจฉัยเพราะมันไม่ชัดเจนเสมอไปว่าภาษาหรือเลเยอร์ของรหัสการเขียนโปรแกรมข้อผิดพลาดมาจากไหนแม้ว่าเลเยอร์หนึ่งจะมีการตรวจสอบขอบเขตโดยนัยและไม่อนุญาตให้ segfaults ใน 99.9% ของบริบทมันอาจเป็นงานที่ต้องใช้เวลามากและน่าเบื่อในการกำหนดว่าข้อผิดพลาดมาจากที่ใดระมัดระวังการจัดการหน่วยความจำแนวทางการเขียนโปรแกรมที่ดีที่สุดแนะนำให้ผู้ใช้ควรปลดปล่อยหน่วยความจำทุกไบต์ที่จัดสรรด้วยตนเองอย่างชัดเจนในโปรแกรมนี่เป็นเรื่องยากที่จะทำ แต่การทำอย่างถูกต้องเพิ่มโอกาสในการสร้างโปรแกรมที่แข็งแกร่งและปราศจากข้อผิดพลาด