Przypisuję wartości w programie C ++ poza granicami w następujący sposób:
#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 drukuje 3i 4. To nie powinno być możliwe. Używam g ++ 4.3.3
Oto polecenie kompilacji i uruchomienia
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Dopiero przy przypisywaniu array[3000]=3000daje mi to błąd segmentacji.
Jeśli gcc nie sprawdza granic tablicy, jak mogę się upewnić, że mój program jest poprawny, ponieważ może to później doprowadzić do poważnych problemów?
Powyższy kod zamieniłem na
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
i ten również nie powoduje błędu.
vector nie zmienia rozmiaru automatycznie podczas uzyskiwania dostępu do elementów spoza zakresu! To tylko UB!