Je suis de l'attribution des valeurs dans un programme C++ sort des limites comme ceci:
#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;
}
Le programme imprime 3
et 4
. Il ne devrait pas être possible. J'utilise g++ 4.3.3
Voici compiler et exécuter la commande
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Seulement lors de l'affectation d' array[3000]=3000
t-il me donner une erreur de segmentation.
Si gcc ne pas vérifier les limites du tableau, comment puis-je savoir si mon programme est correcte, car elle peut conduire à de graves problèmes plus tard?
J'ai remplacé le code ci-dessus avec
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
et celui-ci est également produit pas d'erreur.
Solution: utiliser std conteneurs lorsque cela est possible, au lieu de raw tableaux, et d'utiliser .at()
au lieu de []
pour les corriger, comportement bien déterminé.