Sto assegnando valori in un programma C ++ fuori dai limiti come questo:
#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;
}
Il programma stampa 3
e 4
. Non dovrebbe essere possibile. Sto usando g ++ 4.3.3
Ecco il comando di compilazione ed esecuzione
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Solo durante l'assegnazione array[3000]=3000
mi dà un errore di segmentazione.
Se gcc non controlla i limiti dell'array, come posso essere sicuro che il mio programma sia corretto, dal momento che può portare ad alcuni problemi seri in seguito?
Ho sostituito il codice sopra con
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
e anche questo non produce alcun errore.
vector
non si ridimensiona automaticamente quando si accede a elementi fuori limite! È solo UB!