是这样定义的
CArray<CString,CString>*m_TextList;
序列化函数中代码为
if (ar.IsStoring())
{ // storing code
}
else
{ // loading code
}
m_LineList->Serialize(ar);读取已保存文件时出错,信息为该内存不能为Read,调试时指向
m_LineList->Serialize(ar);
CArray类型的变量应该如何序列化那,请高手指点
CArray<CString,CString>*m_TextList;
序列化函数中代码为
if (ar.IsStoring())
{ // storing code
}
else
{ // loading code
}
m_LineList->Serialize(ar);读取已保存文件时出错,信息为该内存不能为Read,调试时指向
m_LineList->Serialize(ar);
CArray类型的变量应该如何序列化那,请高手指点
CArray不能支持包含构造函数进行或者指针数据成员的类
你可以使用CStringArray。
如下: 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”。到底是怎么回事啊?多谢了
{
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.
{ // storing code
}
else
{ // loading code }
m_LineList->Serialize(ar);//只加这一句就可以了