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)
{
arr[i]=0;
}
}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.