我們先來看看下面的代碼:
#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指派,就是越界。