Vector Problem
-
Hallo warum wird hier nicht das letzde Element aus dem Vector gelöscht ?
data[2]; <-- Da dürfste doch eigentlich gar kein Wert stehen nach dem pop_back();
#include <vector> #include <iostream> using namespace std; int main() { vector<int> data; data.push_back(1); data.push_back(2); data.push_back(3); for(int j=0; j< 3 ;++j) { cout<<data[j]<<" "; cout<<endl; } cout<<endl; cout<<endl; data.pop_back(); cout<<data[2]; // gibt eine 3 aus system("PAUSE"); }
-
Undefiniertes Verhalten. Mehr nicht.
-
Was bedeutet "Undefiniertes Verhalten" ?
Hier steht: http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 1%3A Container
pop_back()
löscht das letzte Element aus dem Vektor.Was mach ich denn da falsch ?
Das muss doch irgendwie gehen.
-
ve_ct_or schrieb:
Was mach ich denn da falsch ?
Das muss doch irgendwie gehen.Du machst nichts falsch, das Element ist logisch gelöscht. Dass du noch darauf zugreifen kannst, wird vom C++-Standard nicht abgedeckt und kann entsprechend Probleme bereiten. Tu es besser nicht.
-
So ein int hat ja eine bestimmte Bitmusterrepräsentation im Speicher. Wenn das Element jetzt aus dem vector gelöscht wird, wird der Speicher zwar freigegeben*, er wird aber nicht überschrieben. Wenn du später auf den Speicher zugreifst, kann dort immer noch das selbe Bitmuster vorliegen, wodurch du den selben Wert erhälst. Das ist aber keineswegs garantiert.
* Der vector behält den Speicher intern für spätere Elemente, das ist hier aber nicht der Punkt