Saya menetapkan nilai dalam program C ++ di luar batas seperti ini:
#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 mencetak 3dan 4. Seharusnya tidak mungkin. Saya menggunakan g ++ 4.3.3
Berikut adalah kompilasi dan jalankan perintah
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Hanya ketika menetapkan array[3000]=3000apakah itu memberi saya kesalahan segmentasi.
Jika gcc tidak memeriksa batasan array, bagaimana saya bisa yakin jika program saya benar, karena dapat menyebabkan beberapa masalah serius nanti?
Saya mengganti kode di atas dengan
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
dan yang ini juga tidak menghasilkan kesalahan.
vector tidak secara otomatis mengubah ukuran ketika mengakses elemen di luar batas! Itu hanya UB!