I have been reading Andrew Koenig’s C traps and pitfalls and found an interesting yet simple loop :
#include<stdio.h>
int main()
{
int i, arr[10];
for(i=1; i<=10; ++i)
{
[i]=0;
arr}
}
This program will obviously attempt to access arr[10]
which does not exist. But that’s a minor thing when compared to its
effect on most computers.
If this "runs on a compiler that allocates memory for variables at
decreasing addresses, the word after " arr[9]
turns out to
be i
. Because i
will be having the largest
address, followed by arr[9]
, arr[8]
, …,
arr[1]
, arr[0]
.
So, if you try to access the non-existent arr[10]
,
what’s really being accessed is the memory right after
arr[9]
which is i
.
By setting this value to 0
, you are actually resetting
the value of i
causing the entire loop to start over and
loop forever.