Skip to main content

การล้นจำนวนเต็มคืออะไร?

การล้นจำนวนเต็มหมายถึงปรากฏการณ์ที่เกิดขึ้นในประเภทข้อมูลคอมพิวเตอร์บางชนิดที่สัญญาณของพวกเขาเปลี่ยนจากบวกเป็นลบหรือในทางกลับกันเมื่อพวกเขาไปถึงจุดสิ้นสุดของช่วงที่เกี่ยวข้องในช่วงคอมพิวเตอร์ชนิดข้อมูลจำนวนเต็มมีช่วงวงกลมและเมื่อพวกเขามาถึงปลายด้านหนึ่งของช่วงของพวกเขาพวกเขาจะย้ายไปที่ปลายอีกด้านหนึ่งทันทีสิ่งนี้เรียกว่าจำนวนเต็มล้น

จำนวนเต็มที่ลงนามสามารถเก็บช่วงของค่าได้ตั้งแต่ -2 31 ถึง (2 31 ) - 1. จำนวนเต็มนี้ไม่สามารถมีค่า (-2 31 ) - 1;ค่อนข้างหมายเลขถัดไปที่เพิ่มขึ้นเป็นที่ปลายอีกช่วงของมัน: (2 31 - 1)การเปลี่ยนแปลงจากลบเป็นบวกในตอนท้ายของช่วงเป็นตัวอย่างของการล้นจำนวนเต็มในทำนองเดียวกันจำนวนเต็มไม่สามารถมีค่า 2 31 ;ค่านี้จะเปลี่ยนไปที่ปลายอีกด้านของช่วงและกลายเป็น -2 31

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

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