我遇到了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