我在尝试使用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.
我知道,并不完全有用。任何可以解决问题的建议都非常感谢。