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.