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
    

Anmelden zum Antworten