天天看點

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指派,就是越界。

繼續閱讀