开发者

integer index incrementation in array

I have one doubt in the following snippet. Actually I am initializing all the array index to zero in following code, but this for loop is going infinitely. I found reason that we are trying开发者_C百科 to access the 26th index of array, so that value gets initialized to zero again since there is 0 to 25 index. So the for loop is going infinitely. Explain if any one the actual reason behind this stuff.

int array[26];
int i; 
for (i = 0; i <= 26; i++) 
    array[i]= 0;


You have to use i < 26; otherwise you exceed the array bounds.

Due to the layout of the stack on most systems array[26] will point to the memory used for i which results in the loop starting again since you loop body is setting i to 0 instead of an appropriate array element.

Note that you can simply use int array[36] = { 0 }; to create the array with all elements being set to 0.


Maybe i is located after array in the memory and it become 0 when i=26 in the loop. I.e. &array[26] == &i.


I found reason that we are trying to access the 26th index of array, so that value gets initialized to zero again since there is 0 to 25 index. So the for loop is going infinitely.

The reason is that your loop variable i goes from 0 to 26 inclusive. But there is no array[26].. only array[0] to array[25] (which is a total of 26 elements).

You are invoking undefined behaviour by writing to array[26]; it just so happens in your execution run that i was laid out just after array in memory, and you were accidentally writing 0 to i due to the erroneous write. This may have caused an infinite loop.

Instead write:

int array[26];
int i;
for (i = 0; i < 26; i++) {
   array[i] = 0; 
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜