Estoy asignando valores en un programa C ++ fuera de los límites como este:
#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;
}
El programa imprime 3y 4. No debería ser posible. Estoy usando g ++ 4.3.3
Aquí está compilar y ejecutar el comando
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Solo cuando asigno array[3000]=3000me da un error de segmentación.
Si gcc no comprueba los límites de la matriz, ¿cómo puedo estar seguro de que mi programa es correcto, ya que puede provocar algunos problemas graves más adelante?
Reemplacé el código anterior 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;
y este tampoco produce ningún error.
vector no se redimensiona automáticamente al acceder a elementos fuera de los límites! ¡Es solo UB!