ฉันกำลังกำหนดค่าในโปรแกรม C ++ จากขอบเขตดังนี้:
#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;
}
โปรแกรมพิมพ์และ3
4
มันไม่ควรจะเป็นไปได้ ฉันใช้ g ++ 4.3.3
นี่คือคำสั่งรวบรวมและเรียกใช้
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
เมื่อกำหนดเท่านั้นarray[3000]=3000
มันให้ฉันแบ่งส่วนความผิด
หาก gcc ไม่ตรวจสอบขอบเขตของอาร์เรย์ฉันจะแน่ใจได้อย่างไรว่าโปรแกรมของฉันถูกต้องเพราะจะนำไปสู่ปัญหาร้ายแรงบางอย่างในภายหลัง
ฉันแทนที่รหัสข้างต้นด้วย
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
และอันนี้ก็ไม่มีข้อผิดพลาด
vector
ไม่ปรับขนาดอัตโนมัติเมื่อเข้าถึงองค์ประกอบที่ไม่อยู่ในขอบเขต! มันเป็นแค่ UB!