我在尝试使用 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.
不完全有帮助,我知道。非常感谢任何可能出现问题的建议。