Segfault bei boost:deserialize
-
Ich deserialisere (boost::serialize) aus einer Datei unerhalte MANCHMAL einen Speicherzurgiffsfehler. Das hier ist mein Kode:
boost::filesystem::ifstream TaktZustaendeDatei(TaktZustaendeDateiname.str()); boost::archive::text_iarchive TaktZustaende(TaktZustaendeDatei); TaktZustaende.register_type<TaktZustand>(); TaktZustaende.register_type<ModulZustand>(); TaktZustaende.register_type<DatenZustand>(); TaktZustaende.register_type<AttributZustand>(); // Wir lesen alle serialisierten TaktZustaende in den Container ein int AnzahlElemente = 0; TaktZustand* TZ = NULL; while(true) { // Wir holen immer ein Objekt des Typs aus dem Archiv try { std::cout << AnzahlElemente << "\n"; TaktZustaende >> TZ; std::cout << AnzahlElemente << "\n"; } catch (boost::archive::archive_exception&) { ausgabe << AnzahlElemente << " Elemente aus " << TaktZustaendeDateiname.str() << " eingelesen. Ende der Logdatei (oder Fehler)" << std::endl; break; } std::cout << "AAAAAA\n"; TaktZustaendeVektor.push_back(TZ); AnzahlElemente++; }Bisher hatte ich XML-Archive verwendet und es hat immer wunderbar geklappt. Nun habe ich auf Text-Archive umgestellt und erhalte manchmal folgende Ausgabe:
http://nopaste.info/3759db6347.html
Wenn es gut läuft sieht es so aus:
http://nopaste.info/162c9a6962.html
Es ist immer das selbe Archiv! Also daran ändert sich von Fall zu Fall nichts, aber ich verstehe einfach nicht wo der Speicherzugriffsfehler herkommen soll!??
-
1. Da fehlt ja noch einiges an Code, bspw. die serialize Funktion(en).
2. Schonmal einen Debugger benutzt ?
3. Ich vermute der Segfault tritt hier auf:
TaktZustaende >> TZ