Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ***检测到堆栈崩溃***:终止中止_C - Fatal编程技术网

C ***检测到堆栈崩溃***:终止中止

C ***检测到堆栈崩溃***:终止中止,c,C,我正在尝试创建一个程序,允许我输入一些学生的分数(1-25)。对于每个学生,我假设输入一些分数(在1-10之间)。对于每个学生,我应该提供他们的名字和姓氏、年龄和平均成绩,具体取决于我输入的分数。这是一个作业,所以我需要在我的程序中有一个名为Info的struct,里面有char变量firstName和lastName、int变量age和float变量average 我的输出中出现错误,称为堆叠粉碎 我不完全清楚为什么会发生这种情况,也不知道在哪里修复它,使它按照我想要的方式运行。如果有人能为

我正在尝试创建一个程序,允许我输入一些学生的分数(1-25)。对于每个学生,我假设输入一些分数(在1-10之间)。对于每个学生,我应该提供他们的名字和姓氏、年龄和平均成绩,具体取决于我输入的分数。这是一个作业,所以我需要在我的程序中有一个名为
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)