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

时间:2014-10-16 16:32:09

标签: c for-loop segmentation-fault

我正在编写一些代码,根据每个组件的等级和权重来计算学生的最终成绩。当以下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.numOfComponents = 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)

1 个答案:

答案 0 :(得分:0)

除非格式字符串中有换行符,否则

printf()在通话后不会刷新。您可能会在printf()后面有一些导致缓冲区溢出的其他代码,如下所示:

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

因此该样本的输出将是这样的:

printed 
Segmentation fault (core dumped)