是数组越界了吗?怎么解决

//定义结构体//
struct achievement
{
int number;
char name[20];
char sex;
int achievement1,achievement2,achievement3;
} tab_achievement[n];

void line3()
{
int j[10],i;
int k;
for(i=0; i<n; i++)
j[i]=0;

for(i=0; i<n; i++)
{
    k=tab_achievement[i].achievement3/10;
    j[k]++;
}
printf("answer\n");
for(i=0; i<10; i++)
    printf("%3d--%3d:%6d\n",i*10,(i+1)*10-1,j[i]);

}图片说明

for(i=0; i<n; i++)
{
k=tab_achievement[i].achievement3/10;
j[k]++;
}

j[k]有可能越界了,这个与你tab_achievement[i].achievement3的值有关

achievement是不是最大为100?j[]最大索引为9,数组 tab_achievement的维数怎么用n?定义了这个宏还是?

修改为:k=tab_achievement[i].achievement3%10;

这样就不会越界了。

凭我的直觉楼上应该是对

我想你上面的程序是想统计每个10分分数段的人数吧(0-9, 10-19,...)?
你的程序里面学生数一定少于10个吗,应该不是吧?
你定义了j[10],而后有for(i = 0; i < n; i++) j[i] = 0;如果学生数大于10个,则数组越界。
如果你是要统计每个10分分数段,总分100分的话,那么应该是定义j[11], for(i = 0; i <= 10; i++) j[i] = 0;,否则你就会漏掉100分的那些同学们。