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