What is an off-by-one error and how do I fix it?

Dina picture Dina · May 30, 2010 · Viewed 25.4k times · Source

What is an off-by-one error? If I have one, how do I fix it?

Answer

Mark Byers picture Mark Byers · May 30, 2010

An off-by-one error is for example when you write intend to perform a loop n times and write something like:

for (int i = 1; i < n; ++i) { ... }

or:

for (int i = 0; i <= n; ++i) { ... }

In the first case the loop will be executed (n - 1) times and in the second case (n + 1) times, giving the name off-by-one. Other variations are possible but in general the loop is executed one too many or one too few times due to an error in the initial value of the loop variable or in the end condition of the loop.

The loop can be written correctly as:

for (int i = 0; i < n; ++i) { ... }

A for loop is just a special case of a while loop. The same kind of error can be made in while loops.