bug
-
hallo
mein Prog fügt eingie werte in meinem vector mit (vector.insert()).Das Einfügen funzt problemlos. aber bis es an einer bestimmten stelle dann bricht ab.beim debuggen kommt die Fehlermeldung:
unbehandelte Ausnahme in myProg.exe: 0xC0000005:access violationwas könnte das sein ! und wie kann ich vorgehen um dies zu vermeiden
vielen dank.
-
zeig deinen Code
-
mein Prog ist groß und unverständlicher, deswegen habe daraus eine kleine version erstellt.
#include<iostream> #include<vector> #include<iomanip> using namespace std; int output(); vector<int> vec; int input() { for( size_t row = 0; row < 12; ++row) { vec.resize(row+1); vec[row]=row; //std::cout << "\r\n"; } output(); return 0; } int insert() { int position=0; int y=0; int x_mal=0; int from =0; int to =0; position=10; std::vector<int>::iterator Iter = vec.begin(); from = 11; to = 22; x_mal= 3; for (int j=0;j<x_mal;++j) { vec.insert(Iter + position, from); vec.insert(Iter + position+1, to); } output(); return 0; } int output() { cout<<"\n\nElemente des Vektors \n"; for( size_t row = 0; row < vec.size(); ++row) { cout <<std::setw(5)<<vec[row]<< ' '; //std::cout << "\r\n"; } cout << "\r\n"; return 0; } int main() { input(); insert(); return 0; }
A propos wenn die for-variable row<10 funzt einwandfrei.
ich glaube hat es mit vec.capacity() zu tun, die am Anfang auf 16 eingestellt.beim debuggen springt er in :
// TEMPLATE FUNCTION copy_backward template<class _BI1, class _BI2> inline _BI2 copy_backward(_BI1 _F, _BI1 _L, _BI2 _X) {while (_F != _L) :arrow_right: *--_X = *--_L; return (_X); }
-
nach dem insert sind alle iteratoren ungültig
mach so:for (int j=0;j<x_mal;++j) { //vec.insert(Iter + position, from); vec.insert(vec.begin() + position, from); //vec.insert(Iter + position+1, to); vec.insert(vec.begin() + position+1, to); }
-
für ssm
Oh Mann! du hast meinen Tag gerettet
vielen Dank