Acess Violation



  • Hi

    muss leider schon wieder um Rat fragen 😞

    also bei folgender Funktion kommt eine Acess Violation:

    vector<question> Quest::ParseAll()  //ließt Datei ein und gibt vector zurück
    {
    	vector<string> data;
    	vector<question> questvec;
    	vector<string>::iterator data_it;
    
    	ifstream FileIn("questions.qaa");
    
    	if (FileIn)   
    	{
        for (string ReadString; getline(FileIn, ReadString);)
    	{data.push_back(ReadString); string temp=*data_it; quest_vec.push_back(ParseLine(temp)); ++data_it; };
    	};
    	return questvec;
    }
    

    und zwar bei

    size_type size() const
    {	// return length of sequence
    	return (_Mysize);
    }
    

    an ParseLine liegts nicht, das funktioniert problemlos, ich find aber den Fehler nicht......

    beginner_



  • die Zeile:

    data_it=data.begin();

    steht noch for ifstream

    beginner_(ich sollt mich langsam mal anmelden um die Doppelposts zu vermeiden...)



  • getline( FileIn, ReadString) gibt dir den ifstream zurück.
    dh. die Abbruchbedingung für for wird niemals false.
    Kurt



  • na klar wird sie false, nämlich sobald das Dateiende erreicht is

    das funktioniert ja auch

    if (FileIn)   
    	{
        for(string ReadString; getline(FileIn, ReadString); ++rows);        
    	};
    

    beginner_



  • Ok Hast recht.



  • Lass den Iterator weg. Der kann nach dem push_back ungültig werden.
    Ausserdem setzt Du ihn zu einem Zeitpunkt wo noch kein Element im vector ist, d.h. begin() == end() und dann darfst Du ihn nicht dereferenzieren (auch nicht nach dem push_back, da er ja immer noch auf end() zeigt).

    In Deiner Schleife benötigst Du ihn auch nicht. Setze temp auf ReadString und dann kommt doch das gewünschte raus.


Anmelden zum Antworten