IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Seralization : Erreur avec l'object boost::archive::xml_oarchive


Sujet :

Boost C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut Seralization : Erreur avec l'object boost::archive::xml_oarchive
    Bonjour à tous,

    Pour des pbs de performance client, je reviens au C++.
    Cela quelque année que je n'avais plus utilisé ce langage et me voila bien rouillé.

    J'ai une erreur à la construction de l'objet boost::archive:: xml_oarchive, il me donne une violation de mémoire ( comme java est doux :-) ).

    voici l'extrait de code qui donne l'erreur d'exécution à la ligne ou je construit l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void save(const DataClass &s, const char * filename){
        // make an archive
        std::ofstream ofs(filename);
        assert(ofs.good());
        boost::archive::xml_oarchive oa(ofs);
        oa << BOOST_SERIALIZATION_NVP(s);
    }
    L'erreur survient sur boost::archive:: xml_oarchive oa(ofs);

    voici l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int _tmain(int argc, _TCHAR* argv[])
    {
    	DataClass c;
    	c.setA(3);
    	c.setStr("test");
    	//std::string filename(boost::archive::tmpdir());
    	 std::string filename(boost::archive::tmpdir());
        filename += "/demo.xml";
    	save(c, filename.c_str());
    	return 0;
    }
    J'ai testé l'example de sérialization fournit par boost et celui marche très bien ce n'est donc pas un pbs de dll.
    Je dois serializer tous un tas d'objet en XML, et me voila bloqué sur un test tout simple.

    Merci d'avance de votre aide et de votre tolérence.

    PS : j'utilise VC++ 2008

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Petite remarque (hors sujet): pourquoi passer un char* dans save et pas directement un std::string?
    Pour ton problème, est-ce que le fichier est bien ouvert?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    oui, le fichier est même créé, mais naturellement il est vide. Depuis un notepad j'arrive à l'ouvrir donc ça c'est bon.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je ne vois qu'une solution: débugger pas à pas pour voir où dans le code ça plante et essayer de comprendre pourquoi. Désolé, j'ai pas mieux.
    Bon courage.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 94
    Par défaut
    J'ai le même type de probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    std::ifstream stream;
    	stream.open(nomFichierResultat.toStdString().c_str(),std::ios_base::in);
     
    if (stream.is_open())
    {
    	try
    	{
    //Plante sur ligne suivante :
    		boost::archive::xml_iarchive ia(stream);
    		ia >> boost::serialization::make_nvp(QSAFFenResultats::m_tagResultat, *pReponse);
    	}
    	//catch boost exceptions
    	catch( boost::archive::archive_exception& e )
    	{
    		std::cerr << "Erreur dans le chargement du fichier " << nomFichierResultat.toStdString() << " : " << e.what() << std::endl;
    	}
    	//Ferme le fichier
    	stream.close();
    }
    L'erreur se déclenche a l' exécution en debug, et passe assez vite en code machine. (erreur finale dans memcopy).
    NB : si je rebuild totalement ma solution, l'exécution se passe très bien.

    J'ai d'abord penser à un problème de dépendances, mais ça n'a pas l'air d'être ça...

Discussions similaires

  1. Object required erreur avec sum if macro
    Par tuytuy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/04/2013, 17h26
  2. erreur avec objecteering
    Par zahi.daoui dans le forum UML
    Réponses: 2
    Dernier message: 16/11/2012, 10h16
  3. Erreur de compilation de boost::date_time avec mingw
    Par shenron666 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 26/08/2006, 18h18
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo