【问题标题】:Boost C++ xml_oarchive Run-Time Check Failure #2 - Stack around the variable was corruptedBoost C++ xml_oarchive 运行时检查失败 #2 - 变量周围的堆栈已损坏
【发布时间】:2015-04-18 21:58:12
【问题描述】:

我对 Boost 序列化非常陌生。我正在使用 Boost 来序列化一个 Xml 文档:

typedef struct xmllist
{
   std::string Name;
   int Param;

   friend class boost::serialization::access;
   template<class Archive>
   void serialize(Archive& ar, const unsigned int version)
   {
      ar & BOOST_SERIALIZATION_NVP(Name);
      ar & BOOST_SERIALIZATION_NVP(Param);
   }
} XMLLIST;

void XmlWrite()
{
   std::ofstream ofs("xmlfile.xml");
   assert(ofs.good());
   boost::archive::xml_oarchive oa(ofs);
   XMLLIST xmllist;
   xmllist.Name = "Name";
   xmllist.Param = 1;
   oa << BOOST_SERIALIZATION_NVP(xmllist);
}

boost::archive::xml_oarchive oa(ofs) 给我运行时检查失败 #2 - 变量 'oa' 周围的堆栈已损坏。

我正在使用 Microsoft Visual Studio 2010 和 boost_1_56_0。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • typedef struct 在 C++ 程序中不需要这个。只需struct 即可。

标签: c++ xml serialization boost


【解决方案1】:

我认为堆栈损坏不是发生在提供的代码中,而是发生在其他地方。我在下面提供的稍作修改的代码在 MSVC++ 2013 和 Boost 1.57 下可以正常工作。在coliru 上也可以正常工作。

#include <string>
#include <sstream>
#include <iostream>
#include <ostream>
#include <cassert>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/access.hpp>

struct CXMLList {
    std::string Name;
    int Param;

    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version) {
        ar & BOOST_SERIALIZATION_NVP(Name);
        ar & BOOST_SERIALIZATION_NVP(Param);
    }
};

int main(int argc, char* argv[]) {
    std::ostringstream ofs;
    boost::archive::xml_oarchive oa(ofs);
    CXMLList xmllist;
    xmllist.Name = "Name";
    xmllist.Param = 1;
    oa << BOOST_SERIALIZATION_NVP(xmllist);
    std::cout << "XML is:" << std::endl;
    std::cout << ofs.str() << std::endl;
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2013-12-13
    • 2013-12-10
    • 2015-02-09
    相关资源
    最近更新 更多