我们先来看看下面的代码:
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
for (int i = 1;i<=N;i++) a[i] = 2;
return 0;
}
当我们写这段代码的时候,编译器就会发生这样的问题。
这是为什么呢???
其实是发生了数组越界。
a[n]里面能装n个数,可这是从0开始装的,当我们从1开始装的时候,最大的数组下标是n-1,可上面那段代码我们却让它给数组下标为n的数组赋值,因此发生了数组越界,也就是未定义问题。
改成如下代码即可:
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
for (int i = 1;i<=N-1;i++) a[i] = 2;
return 0;
}
注意:
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
for (int i = 0;i<=N;i++) a[i] = 2;
return 0;
}
这样也是越界,只要我们给数组下标为n赋值,就是越界。