CArray添加数据的有关问题(在对话框中单击Add数据,然后按正常的序列化)在文档类的序列化过程中出现有关问题

CArray添加数据的问题(在对话框中单击Add数据,然后按正常的序列化)在文档类的序列化过程中出现问题
1)在文档类.h文件中声明了一个自定义的类(用于组成CArray中的数组),位置在文档类的声明前。
class CPt :public CObject
{
public:
int x,y;
public:
CPt();
DECLARE_SERIAL(CPt)
public:
virtual void Serialize(CArchive& ar);

};
2)在文档类.cpp文件中实现这个类,位置在文档类的实现结束后。
IMPLEMENT_SERIAL(CPt,CObject,1)
CPt::CPt()
{
}

CPt::CPt(int a,int b)
{
x=a;y=b;
}
void CPt::Serialize (CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
// TODO: add storing code here
ar<<x;
ar<<y;
}
else
{
// TODO: add loading code here
int a,b;
ar>>a;
ar>>b;
x=a;y=b;
}
}
3)在在文档类.h文件中加入成员变量(CArray数组)
class CBaoCunDoc : public CDocument
{
public: // create from serialization only
CBaoCunDoc();
DECLARE_DYNCREATE(CBaoCunDoc)

// Attributes
public:
CArray<CPt*,CPt*>m_a;
4)响应对话框上面的按钮单击事件
void CBcDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
  CBaoCunDoc* pDoc = (CBaoCunDoc*)pMainFrame->GetActiveDocument();
CPt* ptemp1 = new CPt;
  ptemp1->x=2;
  ptemp1->y=4;
pDoc->m_a.Add(ptemp1);
pDoc->m_a.Add(&CPt(3,6));
}
5)在文档类.cpp文件中更改Serialize函数
void CBaoCunDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
ar<<m_a.GetSize();
for (int i=0;i<m_a.GetSize();i++)
{
m_a[i]->Serialize(ar);
}
}
else
{
// TODO: add loading code here
int w;
ar>>w;
CPt tr;
for (int i=0;i<w;i++)
{
m_a.Add(&tr);
}
}
}
经过我的测试,在响应对话框上面的按钮单击事件上我输出了下m_a[1]->x的值,显示成功,但是我在CBaoCunDoc::Serialize(CArchive& ar)再次输出m_a[1]->x的值时,就是乱码了。
请问原因?????


------解决方案--------------------
你在m_a添加了两个值
应该是第二个有问题吧
pDoc->m_a.Add(&CPt(3,6));
这里CPt(3,6)产生的事临时变量
随后就释放掉了