天天看点

C++未定义行为-数组越界

我们先来看看下面的代码:

#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;
}
           

当我们写这段代码的时候,编译器就会发生这样的问题。

C++未定义行为-数组越界

这是为什么呢???

其实是发生了数组越界。

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赋值,就是越界。

继续阅读