Bu gibi sınırların dışında bir C ++ programında değerler atamak:
#include <iostream>
using namespace std;
int main()
{
int array[2];
array[0] = 1;
array[1] = 2;
array[3] = 3;
array[4] = 4;
cout << array[3] << endl;
cout << array[4] << endl;
return 0;
}
Program 3
ve yazdırır 4
. Bu mümkün olmamalı. G ++ 4.3.3 kullanıyorum
İşte derleme ve çalıştırma komutu
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Sadece atama yaparken array[3000]=3000
bana bir segmentasyon hatası veriyor.
Gcc dizi sınırlarını kontrol etmezse, daha sonra bazı ciddi sorunlara yol açabileceğinden programımın doğru olup olmadığından nasıl emin olabilirim?
Yukarıdaki kodu ile değiştirdim
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
ve bu da hata üretmez.
vector
, sınır ötesi öğelere erişirken otomatik olarak yeniden boyutlandırılmaz! Sadece UB!