|
Boost Users : |
From: RIVASSEAU Jean Noel (JN.RIVASSEAU_at_[hidden])
Date: 2006-02-09 05:33:23
I am assuming you meant :
std::ofstream ifs("container.mob");
boost::archive::text_oarchive ia(ofs);
oa << MyObject;
ofs << std::endl;
and not std::ifstream ifs.
So if I understand well, this "patch" only adds a newline to the archive at the saving stage.
I tried it but it did not help in any way; in fact I cannot see how it could help, since the problem is at the point of the loading of the std::string, not at the end of the load of the whole object. What I mean here is that MyObject is, in my case, a class containing a std::vector of pointers to class containing std::strings. One of these strings is too long, which causes the crash. Maybe what you meant is appending the std::endl after the serialization of the std::string, but this is not possible since at this point I have only access to the archive, not the underlying ofstream :
template<class Archive>
void serialize(Archive & ar, const MyClass& m, const unsigned int version)
{
ar & m.a_standard_string;
}
I do not have access there to the underlying ofstream of the implementation. Note that here, MyObject would contain a std::vector < MyClass * >. And I am serializing directly MyObject which causes the serialization of MyClass later.
So, what do you mean? Have you located the bug ?
_____
De : boost-users-bounces_at_[hidden] [mailto:boost-users-bounces_at_[hidden]] De la part de Robert Ramey
Envoyé : jeudi 9 février 2006 04:46
À : boost-users_at_[hidden]
Objet : Re: [Boost-users] [Serialization]: bug while serializing astd:string
Untl 1.34 comes out try the following on the output stream
std::ifstream ofs("container.mob");
boost::archive::text_oarchive ia(ofs);
oa << MyObject;
ofs << std::endl;
"RIVASSEAU Jean Noel" <JN.RIVASSEAU_at_[hidden]> wrote in message news:87F60F7FA02FF749AFB02BD9FCAA6B04C87411_at_naserv31.nanterre.oberthurcs.com...
I have been able to test with a string stream; the bug does not occur.
That is, this code produces the bug:
std::ifstream ifs("container.mob");
boost::archive::text_iarchive ia(ifs);
ia & MyObject;
while the following does not:
std::ifstream ifs("container.mob");
std::ostringstream tmp;
tmp << ifs.rdbuf();
std::istringstream is(tmp.str());
boost::archive::text_iarchive ia(is);
ia & MyObject;
a) try using a different stream buffer - strstream
So do you have any clue, Robert ?? Clearly the problem has to do with buffering somewhere....
Jean-Noël
_____
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net