我有一个随机数生成器将数字输入数组,但是当我打印出表格时,最后一行总是一组超出我在以下函数中定义的边界的值:
#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;
之前我已经创造了这种性质的东西,但现在它的表现,我只是不知道在哪里。
答案 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()
,至少在发布它时如何。