Ich weise Werte in einem C ++ - Programm außerhalb der folgenden Grenzen zu:
#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;
}
Das Programm druckt 3
und 4
. Es sollte nicht möglich sein. Ich benutze g ++ 4.3.3
Hier ist der Befehl zum Kompilieren und Ausführen
$ g++ -W -Wall errorRange.cpp -o errorRange
$ ./errorRange
3
4
Nur beim Zuweisen array[3000]=3000
gibt es einen Segmentierungsfehler.
Wenn gcc nicht nach Array-Grenzen sucht, wie kann ich dann sicher sein, dass mein Programm korrekt ist, da dies später zu schwerwiegenden Problemen führen kann?
Ich habe den obigen Code durch ersetzt
vector<int> vint(2);
vint[0] = 0;
vint[1] = 1;
vint[2] = 2;
vint[5] = 5;
cout << vint[2] << endl;
cout << vint[5] << endl;
und dieser erzeugt auch keinen Fehler.
vector
ändert die Größe nicht automatisch, wenn auf Elemente außerhalb der Grenzen zugegriffen wird! Es ist nur UB!