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 3
dan 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]=3000
apakah 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!