是这样定义的
  CArray<CString,CString>*m_TextList;
序列化函数中代码为
   if (ar.IsStoring())
{ // storing code
}
else
{ // loading code
}
m_LineList->Serialize(ar);读取已保存文件时出错,信息为该内存不能为Read,调试时指向
m_LineList->Serialize(ar);
CArray类型的变量应该如何序列化那,请高手指点

解决方案 »

  1.   

    CArray<CString,CString>
    CArray不能支持包含构造函数进行或者指针数据成员的类
    你可以使用CStringArray。
      

  2.   

    能给个例子麽,我想用GetSize得到大小却报错,麻烦稍详细些讲讲,多谢
      

  3.   

    同意jiangsheng,你应该用CStringArray,其它莫名其妙的错误可能与序列化无关。
      

  4.   

    根据大家的建议,我做了些修改,首先用CStringArray定义list
    如下:    CStringArray *m_LineList;
    并在构造函数中: m_LineList=new CStringArray;
    序列化函数内容改为:
             int size;
       if (ar.IsStoring())
    { // storing code
                  size = m_LineList->GetSize();
    ar<< size;
    for(int i=0;i<size;i++)
    {
    m_LineList->Serialize(ar);
    }
    }
    else
    { // loading code
                       ar>> size;
    for(int i=0;i<size;i++)
    {
    m_LineList->Serialize(ar);
    }
    }
    我做了调试,发现存入是没有问题的,这是不是就说明我得指针不是野指针?,
    问题出在读(loading)已存储的文件时,其中size还是可以得到,但是到
    m_LineList->Serialize(ar);这一句就出错了,出错信息为“0x0040dab3”指令引用的“0xcdcdcdcd”内存,改内存不能为“read”。到底是怎么回事啊?多谢了
              
      

  5.   

    if (ar.IsStoring())
    {

    m_pstrArray = new CStringArray;
    m_pstrArray->SetSize(10);
    ar << 10;
    for(int i = 0; i < 10 ; i++)
    {
    CString str;
    str.Format("%d",i);
    m_pstrArray->SetAt(i,str);
    }
    m_pstrArray->Serialize(ar);
    delete m_pstrArray;
    }
    else
    {
    m_pstrArray = new CStringArray;
    int size;
    ar >> size;
    m_pstrArray->SetSize(size);
    m_pstrArray->Serialize(ar); for(int i = 0; i < size; i++)
    {
    CString str = m_pstrArray->GetAt(i);
    TRACE("%s\n",str);
    }
    }
    These codes will be ok.
      

  6.   

    if (ar.IsStoring())
    { // storing code
    }
    else
    { // loading code         }
             m_LineList->Serialize(ar);//只加这一句就可以了
      

  7.   

    m_LineList->Serialize(ar)会根据传入的ar来自行判断是store还是load
      

  8.   

    CStringArray类本身就支持序列化,干嘛还要那么麻烦呢?