0
#include<stdio.h>

int main()
{
int a[100], i=0;
while(1)

{

        a[i++]=5;
        printf("%d\n",i);

}
return 0;
}

on gcc this code doesn't give ny error. but after printing the value of i upto 100 , it restart writing value of i from 6 onward...
my question is how value of i is changing after reaching 100..

plz help

4
Contributors
5
Replies
6
Views
8 Years
Discussion Span
Last Post by Salem
0

You answered it yourself.
You overran the array.
You then trashed i, and i got a new value.

There is no guarantee that the program will fail if you do anything wrong. If you want that kind of safety net, use another language.

0

but 'i' doesn't have any any connection with array...i is an independent value and i think it's value should increase infinitely....

Can u tell at what time ,i 's value is changed?

0

Once you're off in the land of undefined behavior, strange things can happen. In this case, I believe I need to reverse the declaration order to see which particular thing you may be seeing. That is,

int i=0, a[100];

...
100
101
102
103
6
7
8
...

This might indicate that the array and i are adjacent and that one of the things that gets trashed when the array is overrun is the value of i .

But trying to explain a particular undefined behavior is a fool's errand.

1

> i is an independent value and i think it's value should increase infinitely
It has to exist in memory SOMEWHERE.

The most likely scenarios are

+=========+
|    i    |
+=========+
| arr[99] |
+=========+
|   ...   |
+=========+
| arr[0]  |
+=========+

OR

+=========+
| arr[99] |
+=========+
|   ...   |
+=========+
| arr[0]  |
+=========+
|    i    |
+=========+

In one case, writing the mythical arr[100] in fact trashes i instead.
In the other case, you miss i, but probably go on to trash something else instead.

In either case, the code is trash.

Votes + Comments
A picture is worth a thousand words.
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.