Tôi đang gán các giá trị trong một chương trình C ++ ngoài giới hạn như thế này:
#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;
}
Chương trình in 3
và 4
. Nó không nên là có thể. Tôi đang sử dụng g ++ 4.3.3
Dưới đây là biên dịch và chạy lệnh
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Chỉ khi gán array[3000]=3000
nó mới cho tôi một lỗi phân khúc.
Nếu gcc không kiểm tra giới hạn mảng, làm thế nào tôi có thể chắc chắn liệu chương trình của mình có đúng không, vì nó có thể dẫn đến một số vấn đề nghiêm trọng sau này?
Tôi đã thay thế đoạn mã trên bằng
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
và điều này cũng không tạo ra lỗi.
vector
không tự động thay đổi kích thước khi truy cập các phần tử ngoài giới hạn! Chỉ là UB!