c-for循环最后一次迭代中的分段错误



我正在编写一些代码,根据每个组成部分的成绩和权重来计算学生的最终成绩。当下面的for循环应该退出时,我遇到了分段错误。

for (i = 0; i < course.numOfSchemes; i++){
printf("Marking scheme# %u n", i);
    for (j = 0; j < course.numOfComponents; j++){
        printf("  Enter %s weight: ",course.components[j]);
        scanf("%f", &course.weights[i][j]);
    }
    printf("End: %u n n",i);
}
printf("rrr");

因此,假设course.numOfSchemes=2,course.num OfComponents=3,这就是试运行的样子。您会注意到循环从开始到结束两次,但从未打印出文本"rrr"。因此,我假设故障发生在循环试图退出时进行的检查期间。

Marking scheme# 0 
  Enter A weight: 20
  Enter B weight: 30
  Enter C weight: 50
End: 0 
Marking scheme# 1 
  Enter A weight: 40
  Enter B weight: 40
  Enter C weight: 20
End: 1 
Segmentation fault (core dumped)

printf()不会在调用后刷新,除非您的格式字符串中有换行符。很可能,在printf()之后还有其他代码导致缓冲区溢出,比如:

printf("printedn");
printf("not printed");
char a[1];
for (int i = 0; i < 100; i++)
{
    a[i] = 0xff;
}

所以这个样本的输出是这样的:

printed 
Segmentation fault (core dumped)

最新更新