int avg(int *p);
int main()
{
int i, average, mark[5];
int arr[5];
for(i = 0; i < 5; i++);
{
arr[i] = scanf_s("%d\n", &mark[i]);
}
average = avg(arr);
}
int avg(int *p)
{
int j, total = 0, avg;
for(j = 0; j < 5; j++)
{
total += p[j];
}
avg = total / 5;
return avg;
}
这个程序没有造成任何错误。但是在跑步的过程中我得到"Run-Time Check Failure #2 -stack around the variable "mark" was corrupted.
有人可以解释一下背后的原因吗?
答案 0 :(得分:1)
为什么你在for循环结束时使用分号..?
for(i = 0; i&lt; 5; i ++);
删除该分号并检查
答案 1 :(得分:1)
for(i = 0; i < 5; i++);
我认为你不想要那个分号!
答案 2 :(得分:1)
首先关于修复:
for(i = 0; i < 5; i++)
{
arr[i] = scanf_s("%d\n", &mark[i]);
}
这只是好事。现在Run-Time Check Failure #2 -stack around the variable "mark" was corrupted
的原因:
当你跑:
for(i = 0; i < 5; i++);
此行之后i = 5
现在您正在进行arr[i] = scanf_s("%d\n", &mark[i]);
现在arr[5]
对您来说不是一个迷你区域。这就是你错误的原因。
答案 3 :(得分:0)
我想对其他答案添加一些解释。
for
循环基本上没有任何内容,除了递增i
,直到它长n < 5
。
因此,如果您退出for
循环,则表示i = 5
,这用于访问arr
和mark
。 <{1}}和arr[5]
均无效,因此您的错误就会发生。