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