将序列化提升为XML崩溃

时间:2012-07-07 13:09:58

标签: c++ serialization boost

我在尝试使用boost序列化对象时遇到了一个奇怪的崩溃。有趣的是,只有在我以发布模式编译项目时才会出现此问题。在调试模式下,一切正常,XML文件写得正确。

以下是应该序列化的类中的代码。成员变量“weights”是指向在构造对象期间动态分配的数组的指针。

[...]
private:
[...]
int     numOrientations;
int     numScales;
float   thresh;
float*  weights;    

friend class boost::serialization::access;
template<class archive> void serialize(archive& ar, const unsigned int version)
{
    using boost::serialization::make_nvp;
    using boost::serialization::make_array;
    ar & make_nvp("numOrient", numOrientations);
    ar & make_nvp("numScales", numScales);
    ar & make_nvp("thresh", thresh);
    ar & make_nvp("weights", make_array(weights, numScales*4 + 1));
}

整个事情被称为:

std::fstream mpbcstr("test.xml", std::fstream::trunc | std::fstream::out);
boost::archive::xml_oarchive xml(mpbcstr);
      <-- program executes fine until here
xml << boost::serialization::make_nvp("gpbconfig", configg);
      <-- is not reached
mpbcstr.close();

因为在调试模式下一切正常。我尝试通过在每行之后打印调试语句来确定错误的位置。我在上面的代码中标记了代码崩溃的行。有趣的是,在序列化功能中,即使第一行在崩溃之前也没有执行。

我得到的错误是:

  First-chance exception at 0x000000013f4c31cd in rungpb.exe: 0xC0000005: Access violation reading location 0x000000003d4ccccd.

我知道,并不完全有用。任何可以解决问题的建议都非常感谢。

0 个答案:

没有答案