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 violation

    was 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


Anmelden zum Antworten