Здравствуйте Xenia, Вы писали:
X>Здравствуйте!
X>Имеется такой код:
X>X>struct Info{
X> CString razd;
X> CString stroka;
X>};
X>CArray<Info,Info> nastr;
X>//и две фуекции - одна создает файл а другая затем его читает
X>void CNastr::CreateFile()
X>{
X> Info inf;
X> CFile file("nastr.nas", CFile::modeWrite | CFile::modeCreate);
X> CArchive ar(&file, CArchive::store);
X> int ArSize=nastr.GetSize();
X> ar.Write(&ArSize,sizeof(int));
X> for (int i=0;i<ArSize;i++)
X> {
X> inf = nastr.GetAt(i);
X> ar.Write(&inf,sizeof(Info));
X> }
X> ar.Close();
X> file.Close();
X>}
X>void CNastr::Init()
X>{
X> CFile file("nastr.nas", CFile::modeRead);
X> CArchive ar(&file, CArchive::load);
X> int ArSize;
X> Info inf=new Info;
X> ar.Read(ArSize,sizeof(int));
X> for (int i=0;i<ArSize;i++)
X> {
X> ar.Read(inf,sizeof(Info));
X> nastr.Add(inf);
X> }
X> ar.Close();
X> file.Close();
X>}
X>
X>При чтении файла вываливается Assertion Failed, File dbgheap.c Line 1011 Expression _CrtlsValidHeapPointer(pUserData)
X>Чего ему не хватает
X>Пробовала выделять память динамически, но это не помогает.
ну ты посмотри, что у тебя происходит:
ты пишешь Info, а в нём 2 строки, которые есть лишь место под вспом. переменные для строки (сами строки динамически получаются, там указатели). Надо сделать типа
clas Info{
CString razd;
CString stroka;
}
CArchive& operator <<( CArchive& ar, const Info& info ){
return ar << info.razd << info.stroka;
};
CArchive& operator >>( CArchive& ar, const Info& info ){
return ar >> info.razd >> info.stroka;
};
//в CNastr::CreateFile()
ar >> inf;
//в CNastr::Init()
ar << inf;
и всё должно быть пучком! (Надеюсь...)