传递一个数组来运行

时间:2013-11-30 11:36:39

标签: c arrays

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.有人可以解释一下背后的原因吗?

4 个答案:

答案 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,这用于访问arrmark。 <{1}}和arr[5]均无效,因此您的错误就会发生。