C ***检测到堆栈崩溃***:终止中止
我正在尝试创建一个程序,允许我输入一些学生的分数(1-25)。对于每个学生,我假设输入一些分数(在1-10之间)。对于每个学生,我应该提供他们的名字和姓氏、年龄和平均成绩,具体取决于我输入的分数。这是一个作业,所以我需要在我的程序中有一个名为C ***检测到堆栈崩溃***:终止中止,c,C,我正在尝试创建一个程序,允许我输入一些学生的分数(1-25)。对于每个学生,我假设输入一些分数(在1-10之间)。对于每个学生,我应该提供他们的名字和姓氏、年龄和平均成绩,具体取决于我输入的分数。这是一个作业,所以我需要在我的程序中有一个名为Info的struct,里面有char变量firstName和lastName、int变量age和float变量average 我的输出中出现错误,称为堆叠粉碎 我不完全清楚为什么会发生这种情况,也不知道在哪里修复它,使它按照我想要的方式运行。如果有人能为
Info
的struct
,里面有char
变量firstName和lastName、int
变量age和float
变量average
我的输出中出现错误,称为堆叠粉碎
我不完全清楚为什么会发生这种情况,也不知道在哪里修复它,使它按照我想要的方式运行。如果有人能为我澄清这一点,我将不胜感激。预计:
for(int n=0; n < studVar; ++n)
for(int n=0;n
得到:
for(int n=1;n预期值:
for(int n=0; n < studVar; ++n)
for(int n=0;n
得到:
for(int n=1;n在C中,当您声明struct Info Student[studVar];
时,该数组的有效索引通过studVar-1
为零,而不是通过studVar
为1
因此,循环中的scanf
语句应该使用n-1
而不是n
。您的问题是,当您为学生人数输入2
时,会得到Student[0]
和Student[1]
试图写入Student[2].id
将导致未定义的行为,例如,hmmm,…,堆栈崩溃,我猜:-)在C中,当您声明struct Info Student[studVar];
时,该数组的有效索引通过studVar-1
为零,不是通过studVar
为1
因此,循环中的scanf
语句应该使用n-1
而不是n
。您的问题是,当您为学生人数输入2
时,会得到Student[0]
和Student[1]
试图写入学生[2].id
将导致未定义的行为,例如,嗯,…,堆栈崩溃,我猜:-)您是否有学生的名字或姓氏超过19个字符?我们需要足够的信息来复制错误。在循环的最后一次迭代中,n
等于数组的长度,从而导致越界写入。它应该是(int n=0;nfor{
相反。哦,谢谢你,我试图将数字从1开始,而不是从0开始,以指示我在哪个学生身上。运行时系统捕捉到堆栈覆盖非常好!C的语义允许它在这种情况下做任何事情。阅读未定义的行为,例如,你有名字或姓氏大于的学生吗19个字符?我们需要足够的信息来复制错误。它是否发生在任何输入中?在循环的最后一次迭代中,n
等于数组的长度,导致越界写入。它应该是for(int n=0;n
相反。哦,谢谢你,我试着从1开始,而不是从0开始,以表明我是哪个学生。很好,你的运行时系统捕捉到堆栈覆盖!C的语义允许它在这种情况下做任何事情。阅读未定义的行为,例如,谢谢,你的解释帮助我解决了它,我不太清楚照你说的做,但我只是在printf和scanf语句中添加了n+1就成功了。谢谢你,你的解释帮助我解决了这个问题,我并没有完全按照你说的做,但我是通过在printf和scanf语句中添加n+1才成功的。
for(int n=0; n < studVar; ++n)
for(int n=1; n <= studVar; ++n)