ความผิดพลาดโดยการคลาดเคลื่อนไปหนึ่ง

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

ความผิดพลาดจากการดำเนินการในวงวน แก้

พิจารณาการทำงานในวงวนที่เริ่มต้นจากค่า m ไปถึง n หากวิเคราะห์ไม่ละเอียดอาจจะได้ว่าจำนวนรอบในการทำงานมีทั้งหมด n - m รอบ อย่างไรก็ดี คำตอบที่แท้จริงคือ n - m + 1 รอบ

for(i = 2; i < 8; ++i){
    // body of the loop
}

เริ่มต้น ค่า i จะมีค่าเป็น 2 และค่อย ๆ เพิ่มขึ้นไปเรื่อย ๆ เป็น 3 4 5 6 จนกระทั่งมาถึง 7 ก็ยังพบว่ายังเข้าเงื่อนไขที่ i < 8 อยู่ ดังนั้นจึงมีการทำงานอีกรอบ จนสุดท้าย i = 8 ซึ่งพบว่าไม่เข้าเงื่อนไขแล้วเพราะ i ไม่น้อยกว่า 8 แล้ว จึงทำให้วงวนจบลบ การทำงานทั้งหมดจึงเริ่มต้นตั้งแต่ i = 2 ... 7 และสุดท้ายมีค่า i = 8 ตัวเลขที่ขอบของวงวนทั้งหมดอาจจะเกิดข้อผิดพลาดได้ทุกที่หากไม่ระวัง

ความผิดพลาดแบบ Fence post แก้