新手,一道瞬间看出错误的c++题目

#include "stdafx.h"
#include
using namespace std;

int main()
{
int n, a[] = { 0 }, sum=0;
cout << "How many students in your class :";
cin >> n;

for (int i = 0;i < n; i++ )
{
    int t;
    cout << "Please input grade(" << i << "): ";
    cin >> t;
    a[i+1] = t;
    sum += a[i+1];
}
cout << sum / n<<endl;
return 0;

}

请问为什么报错是RUN TIME CHECK FAILURE #2?
谢谢!!

  a[] = { 0 }
 a的长度太小。后面你溢出了。
 int n, a[] = { 0 }, sum=0;
 修改为int n, sum = 0;
 int *a;
 cin >> n;
 后面加上
 a = new int[n];

 a[i+1] = t;
sum += a[i+1];
修改为
a[i] = t;
sum += a[i];

你不觉得数组范围有点小吗

a[] = { 0 }的话只给a分配了1个int的空间,对未分配内存的地址赋值肯定溢出呀

范围分配过小,其他未分配的造成溢出

a[] = { 0 }只分配了一个空间

数组要在编译前确定大小,而且一旦确定不能更改。你想输入n作为数组的大小,这样子是不行了。如果想用输入的n作为大小,只能使用指针,然后用malloc分配大小

数组在定义的时候尽快分配好内存大小,如果之后需要修改其大小,也可以动态的改。