2

我在尝试使用 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.

不完全有帮助,我知道。非常感谢任何可能出现问题的建议。

4

0 回答 0