Acceder a una matriz fuera de límites no da error, ¿por qué?

Estoy asignando valores en un programa de 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 se imprime3 y4. No debería ser posible. Estoy usando g ++ 4.3.3

Aquí está el comando compilar y ejecutar

$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4

Solo al asignararray[3000]=3000 ¿Me da una falla 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 dar lugar a problemas serios más adelante?

He reemplazado 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 también es el que no produce ningún error.

Respuestas a la pregunta(17)

Su respuesta a la pregunta