Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

วิธีตรวจจับ Integer Overflow ใน C++


วิธีที่ปลอดภัยที่สุดคือตรวจสอบ overflow ก่อนที่จะเกิดขึ้น มีวิธีการแบบ hacky สำหรับตรวจจับ integer overflow บ้าง ดังนั้น หากคุณต้องการตรวจจับ overflow ในการบวก unsigned int สามารถตรวจสอบว่าผลลัพธ์น้อยกว่าค่าใดค่าหนึ่งที่บวกเข้ามาได้ ตัวอย่างเช่น

unsigned int x, y; 
unsigned int value = x + y; 
bool overflow = value < x; // หรือ "value < y" ก็ได้เช่นกัน

เนื่องจากหาก x และ y เป็น unsigned int ทั้งคู่ เมื่อบวกกันและเกิด overflow ค่าของพวกเขาจะไม่สามารถมากกว่าค่าใดค่าหนึ่งได้ เนื่องจากจะต้องมากกว่าค่า unsigned int สูงสุดเพื่อให้ wrap around และนำหน้าค่าเหล่านั้นได้

อีกวิธีหนึ่งคือพยายามเข้าถึง Overflow flag ใน CPU บางคอมไพเลอร์ให้สิทธิ์เข้าถึงได้ ซึ่งคุณสามารถทดสอบได้ แต่วิธีนี้ไม่ใช่มาตรฐาน

มีวิธีอื่นๆ อีกเพื่อทำสิ่งนี้ แต่ให้เพียงการประมาณการเท่านั้น สามารถดูได้ที่นี่ − https://stackoverflow.com/a/199455/3719089