bad alloc



  • hi,

    bei einer der beiden Funktionen wird ein bad alloc geworfen, komm aber nicht drauf wieso

    :

    question Quiz::ParseLine(string line)
    {
    	basic_string <char>::size_type index;
    	index=line.find("|");
    
    	question q_temp;
    	string tempstring;
    
    	tempstring=(line.substr(0, index));
    	q_temp.quest=tempstring;
    	tempstring=line.substr(index+1, (line.length()-(q_temp.quest.length()+1)));
    	q_temp.answer=tempstring;
    	return q_temp;
    };
    
    bool Quiz::ParseAll()
    {
    	ifstream FileHandle("questions.qaa");
    	vector<string> v_temp;
    
    	if(FileHandle){
    		string s_temp;
    		while(getline(FileHandle , s_temp)){
    			v_temp.push_back(s_temp); }
    	}
    
    	for(unsigned int i(0); i<=v_temp.size(); ++i){
    		question q_temp=ParseLine(v_temp[i]);
    		q_Vec.push_back(q_temp);
    	}
    
    	return true;
    };
    

    zur Vollständigkeit noch:

    struct question{
    	std::string quest;
    	std::string answer;
    };
    

    beginner_



  • Kann man dir ohne weitere Infos nicht sagen. Benutz nen Debugger. Wies mit VC++ geht, siehst du im Magazin: http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html



  • Array bounds error.
    Besser so

    for(unsigned int i(0); i<v_temp.size(); ++i){
    

    Kurt



  • so funktionierts, danke

    aber jetzt tritt ein neues Problem auf:

    der Vector is immer ein Element zu lang, und das letzte is leer

    auch da komm ich nicht drauf...

    der relevante Code steht bereits oben

    beginner



  • Zwei möglichkeiten.

    while(getline(FileHandle , s_temp)){
                if ( s_temp.length() )
                    v_temp.push_back(s_temp); }
    

    oder du machst kein \n nach der letzten zeile im file
    Kurt



  • das funktioniert auch nicht, hab trotzdem noch ein leeres Element am Schluss

    beginner_



  • Bei mir geht's so einwandfrei.

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    using namespace std;
    
    struct question{
        std::string quest;
        std::string answer;
    }; 
    
    vector<question> q_Vec;
    
    question ParseLine(string line) {
        basic_string <char>::size_type index;
        index=line.find("|");
    
        question q_temp;
        string tempstring;
    
        tempstring=(line.substr(0, index));
        q_temp.quest=tempstring;
        tempstring=line.substr(index+1, (line.length()-(q_temp.quest.length()+1)));
        q_temp.answer=tempstring;
        return q_temp;
    }
    
    bool ParseAll() {
        ifstream FileHandle("questions.qaa");
        vector<string> v_temp;
    
        if(FileHandle){
            string s_temp;
            while(getline(FileHandle , s_temp)){
               if ( s_temp.length() )
                  v_temp.push_back(s_temp); 
            }
        }
    
        for(unsigned int i(0); i<v_temp.size(); ++i){
            question q_temp=ParseLine(v_temp[i]);
            q_Vec.push_back(q_temp);
        }
        return true;
    }
    
    int main() {
       ParseAll();
       cout << endl;
       for ( int i = 0; i < q_Vec.size(); ++i ) {
            cout << "q:" << q_Vec[i].quest << " a:" << q_Vec[i].answer << endl;
       }
    }
    

    Kurt


Anmelden zum Antworten