我遇到了VS2010 VC++中的指针数据序列化和反序列化问题。基本上,该程序无法序列化和反序列化CObList *指针数据。源代码执行处理该过程的正常步骤:使用MFC CArchive序列化指针(使用mfc100d.dll,CMemFile)
1)MyObject从CObject继承;
2)我们在类声明(第1行)中添加了DECLARE_SERIAL(MyObject);
3)我们添加IMPLEMENT_SERIAL(为MyObject,MyParentObject,SCHEMA_VERSION)
//Where MyParentObject is inherited from CObject (indirectly, there're a few more levels of objects), SCHEMA_VERSION is just a version control CONSTANT we use
4)然后,我们已经超负荷
void MyObject::Serialize(CArchive& ar)
{
BOOL b;
.....
... (some other simple variables with default values)
MyParentObject::Serialize(ar);
if (ar.IsStoring())
{
ar << m_sTitle;
ar << m_pObjectsList;
}
else
{
ar >> m_sTitle;
ar >> m_pObjectsList;
}
}
注:MyParentObject ::序列化是相应的执行。 CObList * m_pObjectsList;在头文件中正确声明。
当试图从“ar >> m_pObjectsList”反序列化时,程序引发了访问冲突(MyApp.exe中的0x52e77b2c(mfc100d.dll)的第一次机会异常:0xC0000005:访问冲突读取位置0x00000004)。
然后我开始测试并将复杂指针m_pObjectsList更改为一个简单的指向CString的指针。将指针反序列化为CString时,同时发生同样的错误。如果我简单地通过CString序列化和反序列化(没有指针),它可以正常工作。似乎有些指针串行化被破坏了。
也许MFC100d在64位OS调试器中不适用于W32程序?这在调试模式和发布模式下都会导致问题。发生了什么?我已经耗尽了我的资源,任何方向或灵感都非常感谢。谢谢大家。
你初始化了'm_pObjectsList'吗? – Erik 2011-03-16 19:56:25
这是遗留的遗留代码库。我看到m_pObjectsList = new CObList;在NewObjectsList方法中,并且m_pObjectsList = NULL;在构造函数代码中。 – 2011-03-16 20:01:14
我认为这表示它已初始化。 – 2011-03-16 20:08:30