Estou atribuindo valores em um programa C ++ fora dos limites 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;
}
O programa imprime 3
e 4
. Não deveria ser possível. Estou usando o g ++ 4.3.3
Aqui está o comando compilar e executar
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Somente ao atribuir array[3000]=3000
isso me causa uma falha de segmentação.
Se o gcc não verificar os limites da matriz, como posso ter certeza se meu programa está correto, pois isso pode levar a alguns problemas sérios mais tarde?
Substituí o código acima por
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 este também não produz erro.
vector
não redimensiona automaticamente ao acessar elementos fora dos limites! É apenas UB!