访问数组中的最后一项时索引超出范围

时间:2017-03-24 17:54:59

标签: c arrays loops

我有一个随机数生成器将数字输入数组,但是当我打印出表格时,最后一行总是一组超出我在以下函数中定义的边界的值:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int temp[22];
    int n;
    for(n=0; n<23; n++){
        temp[n] = rand()%(100 + 1 - 60) + 60;
        printf("%d  ,  %d \n", n, temp[n]);
}
return 0;

之前我已经创造了这种性质的东西,但现在它的表现,我只是不知道在哪里。

2 个答案:

答案 0 :(得分:3)

您正在访问未定义行为的边界之外的数组。

而是使用sizeof运算符来避免此类问题:

for(n = 0; n < sizeof temp/sizeof temp[0]; n++)

但请注意,如果temp成为malloc指针(int *temp = malloc(23 * sizeof *temp);),那么sizeof将无效。

答案 1 :(得分:2)

您的数组正在其边界之外访问。

int temp[22]; 
  

此声明为temp分配22个索引,temp[0]是第一个   value和temp[21]是您可以在数组中访问的最后一个值。计数0,从0..21 =我们有 22值

您的for循环不正确:

for(n=0; n<23; n++)

这将使程序尝试访问不存在的temp[22]。您需要将其更改为:

for(n=0; n<22; n++)
  

<强>此外:   return 0;需要位于main()函数的内部和末尾。它可能是一个错字,但您在}函数中错过了右括号main(),至少在发布它时如何。