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 3
y 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]=3000
me 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!